使用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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
JS实现多物体缓冲运动实例代码
Nov 29 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
Feb 13 Javascript
浅析js中substring和substr的方法
Nov 09 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
微信开发 微信授权详解
Oct 21 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
3分钟掌握常用的JS操作JSON方法总结
Apr 25 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
react配置antd按需加载的使用
Feb 11 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php zend 相对路径问题
2009/01/12 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Java基础知识面试题
2014/03/25 面试题
领导接待方案
2014/03/13 职场文书
倡议书范文
2014/04/16 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
python实现会员信息管理系统(List)
2022/03/18 Python