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 相关文章推荐
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 jQuery
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
jQuery获取随机颜色的实例代码
May 21 jQuery
jQuery实现基本动画效果的方法详解
Sep 06 jQuery
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
Jquery使用each函数实现遍历及数组处理
Jul 14 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
jQuery 使用手册(六)
2009/09/23 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python and or用法详解
2019/06/26 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
Python中求对数方法总结
2020/03/10 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
幼儿园中班教学反思
2014/02/10 职场文书
毕业晚会主持词
2014/03/24 职场文书
保管员岗位职责
2015/02/14 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
安全温馨提示语大全
2015/07/14 职场文书
老乡会致辞
2015/07/28 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
Python机器学习之决策树和随机森林
2021/07/15 Javascript
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫