jQuery实现当拉动滚动条到底部加载数据的方法分析


Posted in jQuery onJanuary 24, 2019

本文实例讲述了jQuery实现当拉动滚动条到底部加载数据的方法。分享给大家供大家参考,具体如下:

滚动条到底部加载数据原理很简单,就是为window或者滚动元素添加一个scroll事件,浏览器每次触发scroll事件时判断是否滚动到了浏览器底部,

如果到了底部则加载新数据。关键是计算滚动条是否滚动到了浏览器底部,算法如下

滚动条卷起来的高度 + 窗口高度 > 文档的总高度 

$(window).on('scroll',function(){
  if(scrollTop() + windowHeight() >= (documentHeight() - 50/*滚动响应区域高度取50px*/)){
    loadMore();
  }
});

获取页面顶部被卷起来的高度函数

//获取页面顶部被卷起来的高度
function scrollTop(){
 return Math.max(
 //chrome
 document.body.scrollTop,
 //firefox/IE
 document.documentElement.scrollTop);
}

chrome浏览器和Firefox/IE对滚动条是属于body还是html理解不同导致处理不同。

获取页面文档的总高度

//获取页面文档的总高度
function documentHeight(){
 //现代浏览器(IE9+和其他浏览器)和IE8的document.body.scrollHeight和document.documentElement.scrollHeight都可以
 return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
}

这个算法和jQuery计算文档高度的方法一致。

获取页面浏览器视口的高度

function windowHeight(){
 return (document.compatMode == "CSS1Compat")?
 document.documentElement.clientHeight:
 document.body.clientHeight;
}

这里需要说明的是document.compatMode这个东东。很陌生,一般情况貌似没有遇到过。

document.compatMode有两个取值"BackCompat"和"CSS1Compat"。官方解释是BackCompat:标准兼容模式关闭。

CSS1Compat:标准兼容模式开启。

IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,

但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode。

举个例子说明两种模式之间的差别有多大。

  • 当document.compatMode等于"BackCompat"时,浏览器客户区宽度是document.body.clientWidth
  • 当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth

还有其他属性类似。这里不说了,但是我们可以预见两种模式导致IE渲染的基石都更改了,可想而知构建出来的建筑物差别当有多大。

所以请为每一个页面声明Doctype不仅仅是一个好习惯,而且是一个必要的处理。Quirks Mode可以进垃圾堆了。

当用户滚动元素中到一个不同的地方时,scroll事件将发送到这个元素。它适用于window对象,但也可滚动框架与CSS overflow属性设置为scroll的元素。

1、普通的div滚动到底部加载更多的方法

<div id="test">内容</div>
$('#test').scroll(function(event){
  var top = $(this).scrollTop();
  var height = $(this).height();
  var scrollHeight = $(this).get(0).scrollHeight;
  if(scrollHeight <= top+height){
    loadMore();
  }
});

结果实验发现#test的div怎么样也不能接受scroll时间,最后经过查找资料和测试,发现要给div加上overflow和height的属性。

#test{
  overflow:scroll;
  height:655px;
}

2、window滚动事件:

$(window).scroll(function () {
  var scrollTop = $(window).scrollTop();       // 滚动条距离顶部的高度
  //scrollHeight,windowHeight,scrollHeight1三个height相同,都是这个页面的高度
  var scrollHeight = $(document).height();     // 当前页面的总高度
  var windowHeight = $(window).height();      // 当前可视的页面高度,jquery获取的不是屏幕的高度,而是整个文档的高度
  var scrollHeight1 = $("#test").get(0).scrollHeight;
  var windowidth = $(window).width();
  var documentwidtht = $(document).width() ;
  var innerHeight = window.innerHeight; //window的高度,即手机的高度
  var clientHeight = document.body.clientHeight; //window的高度
  var clientHeight1 = document.documentElement.clientHeight;//这个是body的整个高度,chrom测试
  if(scrollTop + innerHeight >= scrollHeight){    // 距离顶部+当前高度 >=文档总高度,即代表滑动到底部
   loadMore();
  }
});

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
基于jquery实现多级菜单效果
Jul 25 jQuery
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
简单实现jQuery上传图片显示预览功能
Jun 29 jQuery
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 jQuery
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
jQuery中DOM常见操作实例小结
Aug 01 jQuery
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
Jquery的Ajax技术使用方法
Jan 21 #jQuery
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 #jQuery
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 #jQuery
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 #jQuery
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 #jQuery
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 #jQuery
jquery的$().each和$.each的区别
Jan 18 #jQuery
You might like
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
JS实现简单打字测试
2020/06/24 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python中map的基本用法示例
2018/09/10 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
元旦寄语大全
2014/04/10 职场文书
社区节水倡议书
2015/04/29 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
python脚本框架webpy模板赋值实现
2021/11/20 Python