使用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幻灯片可循环播放可平滑旋转带滚动导航(自写)
Aug 05 Javascript
node.js下when.js 的异步编程实践
Dec 03 Javascript
jQuery实现炫酷的鼠标轨迹特效
Feb 01 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
详解http访问解析流程原理
Oct 18 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
微信小程序获取用户信息并保存登录状态详解
May 10 Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 Javascript
node 版本切换的实现
Feb 02 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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
那些年一起学习的PHP(二)
2012/03/21 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
js中this的用法实例分析
2015/01/10 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
高中生家长会演讲稿
2014/01/14 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
好员工观后感
2015/06/17 职场文书
图书借阅制度范本
2015/08/06 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript