浅析jquery如何判断滚动条滚到页面底部并执行事件


Posted in Javascript onApril 29, 2016

本文章向码农介绍jquery如何判断滚动条滚到页面底部并执行事件。首先理解三个dom元素,分别是:clientHeight、offsetHeight、scrollTop。

首先理解三个dom元素,分别是:clientHeight、offsetHeight、scrollTop。

clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那个这个高度则是不包括滚动条没显示出来的下面部分的内容。而只是单纯的DIV的高度。

offsetHeight:是指元素内容的高度。依照上面的,那这个高度呢就是DIV内部的高度,包括可见部分及以滚动条下面的不可见部分。

scrollTop:这个是什么呢?他可以理解为滚动条可以滚动的长度。

举例,如果一个DIV高度是400px(即clientHeight为400),而里面的内容是一个很长的列表,内容的高度是1000px(即offsetHeight为1000)。那么,可见部分我们看到400px,1000px的内容中还有600px不可见。而这不可见的部分呢,正是我们通过拉动滚动条才能把这一部分显示出来。你如果滚动条不拉动,此时scrollTop为0,如果你把滚动条拉到底,显示出列表最下面的部分,此时,scrollTop为600。 所以scrollTop的取值区间为[0, 600]。 所以这个600可以理解为滚动条可以滚动的长度。

理解完上面的这个概念之后。要判断是否滚动到底部就很好做了。

首先,我们拉动滚动条,从最上面拉到最下面,变化的是scrollTop的值,而这个值是有一个区间的。
这个区间是: [0, (offsetHeight - clientHeight)]
即,滚动条拉动的整个过程的变化在 0 到 (offsetHeight ? clientHeight) 范围之内。

1、判断滚动条滚动到最底端: scrollTop == (offsetHeight ? clientHeight)
2、在滚动条距离底端50px以内: (offsetHeight ? clientHeight) ? scrollTop <= 50
3、在滚动条距离底端5%以内: scrollTop / (offsetHeight ? clientHeight) >= 0.95

如上。
如果要实现拉到底部自动加载内容。只要注册个滚动条事件:

scrollBottomTest =function(){
   $("#contain").scroll(function(){
     var $this =$(this),
     viewH =$(this).height(),//可见高度
     contentH =$(this).get(0).scrollHeight,//内容高度
     scrollTop =$(this).scrollTop();//滚动高度
    //if(contentH - viewH - scrollTop <= 100) { //到达底部100px时,加载新内容
    if(scrollTop/(contentH -viewH)>=0.95){ //到达底部100px时,加载新内容
    // 这里加载数据..
    }
   });
}

以上这篇浅析jquery如何判断滚动条滚到页面底部并执行事件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
May 24 Javascript
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
String.prototype实现的一些javascript函数介绍
Nov 22 Javascript
玩转方法:call和apply
May 08 Javascript
jQuery中append()方法用法实例
Jan 08 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
微信小程序中用WebStorm使用LESS
Mar 08 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
Vue.js用法详解
Nov 13 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
原生JavaScript实现拖动校验功能
Sep 29 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
Apr 29 #Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 #Javascript
深入剖析JavaScript中的函数currying柯里化
Apr 29 #Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 #Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 #Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
Apr 29 #Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 #Javascript
You might like
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php过滤敏感词的示例
2014/03/31 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
php实用代码片段整理
2016/11/12 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
python 解压pkl文件的方法
2018/10/25 Python
python验证身份证信息实例代码
2019/05/06 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
如何卸载python插件
2020/07/08 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
项目计划书范文
2014/01/09 职场文书
名人传读书笔记
2015/06/26 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python