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


Posted in Javascript onMarch 06, 2016

相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多,用鼠标操作的时候相信都见过这样的效果:进入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); 
    }); 
   } 
  }

 

Javascript 相关文章推荐
基于jquery的一个图片hover的插件
Apr 24 Javascript
js substr、substring和slice使用说明小记
Sep 15 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
Mar 14 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 Javascript
jQuery simpleModal插件的使用介绍
Aug 30 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
浅谈vue-router 路由传参的方法
Dec 27 Javascript
JS实现自定义弹窗功能
Aug 08 Javascript
node.js实现带进度条的多文件上传
Mar 27 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 #Javascript
JavaScript模拟数组合并concat
Mar 06 #Javascript
JavaScript模拟push
Mar 06 #Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 #Javascript
Node.js模块封装及使用方法
Mar 06 #Javascript
JavaScript中三种异步上传文件方式
Mar 06 #Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
php查询ip所在地的方法
2014/12/05 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
详解Nodejs之静态资源处理
2017/06/05 NodeJs
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
Python httplib模块使用实例
2015/04/11 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
python中的错误处理
2016/04/10 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python构建自定义回调函数详解
2017/06/20 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python3并发写文件与Python对比
2019/11/20 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python页面加载的等待方式总结
2021/02/28 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
《中国的气候》教学反思
2014/02/23 职场文书
安全责任书范本
2014/04/15 职场文书
助学金感谢信
2015/01/20 职场文书
重阳节慰问信
2015/02/15 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
Go 语言结构实例分析
2021/07/04 Golang
Python借助with语句实现代码段只执行有限次
2022/03/23 Python