使用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 相关文章推荐
代码精简的可以实现元素圆角的js函数
Jul 21 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
深入解读JavaScript中的Iterator和for-of循环
Jul 28 Javascript
javascript实现动态统计图开发实例
Nov 21 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
Dec 08 Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
Jan 04 Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
理解JS事件循环
2016/01/07 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
剖析Python的Twisted框架的核心特性
2016/05/25 Python
详解python中requirements.txt的一切
2017/03/03 Python
python爬取m3u8连接的视频
2018/02/28 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
如何理解transaction事务的概念
2015/05/27 面试题
应届大专毕业生个人自荐信
2013/09/22 职场文书
十八大闭幕感言
2014/01/22 职场文书
幼儿教师工作感言
2014/02/14 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技