使用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 相关文章推荐
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 Javascript
基于vue-element组件实现音乐播放器功能
May 06 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
详解如何运行vue项目
Apr 15 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
详解VUE中的插值( Interpolation)语法
Oct 18 Javascript
解决vue-loader加载不上的问题
Oct 21 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接口与接口引用的深入解析
2013/08/09 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
javascript读取RSS数据
2007/01/20 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Django的models中on_delete参数详解
2019/07/16 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Python可以用来做什么
2020/11/23 Python
Python安装Bs4的多种方法
2020/11/28 Python
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
银行学习十八大感想
2014/01/11 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
五一活动标语
2014/06/30 职场文书
2014年财政工作总结
2014/12/10 职场文书
乐山大佛导游词
2015/02/02 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
河童之夏观后感
2015/06/11 职场文书
红色革命电影观后感
2015/06/18 职场文书
礼貌问候语大全
2015/11/10 职场文书