首页 > 编程 > JavaScript > 正文

使用jQuery或者原生js实现鼠标滚动加载页面新数据

2019-11-20 10:26:37
字体:
来源:转载
供稿:网友

相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多,用鼠标操作的时候相信都见过这样的效果:进入qq空间,向下拉动空间,到底部时,会动态加载剩余的说说或者是日志 ,今天我们就来看看他们的实现思路和js控制动态加载的代码。

下面的代码主要是控制滚动条下拉时的加载事件的,无论是加载图片还是加载记录数据  都可以。

加载jQuery库后我们可以这样使用:  

 $(window).scroll(function () {    var scrollTop = $(this).scrollTop();    var scrollHeight = $(document).height();    var windowHeight = $(this).height();    if (scrollTop + windowHeight == scrollHeight) {   //此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作//var page = Number($("#redgiftNextPage").attr('currentpage')) + 1;//redgiftList(page);//$("#redgiftNextPage").attr('currentpage', page + 1);    }  });

解析:

判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。

  • scrollTop为滚动条在Y轴上的滚动距离。
  • clientHeight为内容可视区域的高度。
  • scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。

从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。 


纯js我们可以这样做:

window.onscroll = function() {    var scrollTop = document.body.scrollTop;    var offsetHeight = document.body.offsetHeight;    var scrollHeight = document.body.scrollHeight;    if (scrollTop == scrollHeight - offsetHeight) {     page++;     loadList(page);    }   };   function loadList(page) {    page = page || 1;     if (isLoad) {     getJSON('/forum.php?mod=hot&page=' + page).then(function(data) {      if (data.code == 200) {       data = data.data;       if (data && Object.keys(data).length > 0) {        for (var k in data) {         var v = data[k];         detailTemplate = detailTemplate.cloneNode(true);         var userInfoObj = detailTemplate.getElementsByClassName('user-info')[0];         userInfoObj.getElementsByClassName('name')[0].innerText = v.author;         userInfoObj.getElementsByClassName('avatar')[0].src = v.avatar;         userInfoObj.getElementsByClassName('post-time')[0].innerHTML = v.lastpost;         detailTemplate.getElementsByClassName('title')[0].innerText = v.subject;         detailTemplate.getElementsByClassName('desc')[0].innerText = v.subject;         var extInfoObj = detailTemplate.getElementsByClassName('ext-info')[0];         extInfoObj.getElementsByClassName('from')[0].innerText = v.fname;         extInfoObj.getElementsByClassName('view-time')[0].innerText = v.views;         postListObj.appendChild(detailTemplate);        }       } else {        isLoad = false;       }      } else {       isLoad = false;      }     }, function(status) {      console.log('Something went wrong, status is ' + status);     });    }   }

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表