使用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的超简单上下翻
Apr 20 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
Dec 08 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
Vue.js组件使用开发实例教程
Nov 01 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
Jan 08 Javascript
RequireJS 依赖关系的实例(推荐)
Jan 21 Javascript
React-router 4 按需加载的实现方式及原理详解
May 25 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
Feb 26 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 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版(5)
2006/10/09 PHP
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
php生成验证码函数
2015/10/20 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
护理专业自我鉴定
2014/01/30 职场文书
集体婚礼策划方案
2014/02/22 职场文书
出国留学计划书
2014/04/27 职场文书
法人委托书的范本格式
2014/09/11 职场文书
美术教师个人总结
2015/02/06 职场文书
小学毕业感言200字
2015/07/30 职场文书