使用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 相关文章推荐
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
Oct 17 Javascript
Js点击弹出下拉菜单效果实例
Aug 12 Javascript
JavaScript基础教程——入门必看篇
May 20 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
JS中使用 after 伪类清除浮动实例
Mar 01 Javascript
Angular2搜索和重置按钮过场动画
May 24 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
浅谈vue中.vue文件解析流程
Apr 24 Javascript
javascript少儿编程关于返回值的函数内容
May 27 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
Jun 23 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 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写的采集程序
2007/03/16 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
浅析JavaScript动画
2015/06/10 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
Python中super的用法实例
2015/05/28 Python
Python base64编码解码实例
2015/06/21 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
销售人员求职的自我评价分享
2014/03/15 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
公司租房协议书范本
2014/10/08 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
邀请函范文
2015/02/02 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
小学音乐课教学反思
2016/02/18 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
Python基础之函数嵌套知识总结
2021/05/23 Python