使用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 16 Javascript
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
详解JavaScript中setSeconds()方法的使用
Jun 11 Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
jquery日历插件datepicker用法分析
Jan 22 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 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中根据变量的类型 选择echo或dump
2012/07/05 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
房屋公证委托书
2014/04/03 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
国际会计专业求职信
2014/08/04 职场文书
政府个人对照检查材料
2014/08/28 职场文书
产品委托授权书范本
2014/09/16 职场文书
政风行风评议心得体会
2014/10/21 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP
学会Python数据可视化必须尝试这7个库
2021/06/16 Python