JS实现判断滚动条滚到页面底部并执行事件的方法


Posted in Javascript onDecember 18, 2014

需要了解三个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时,加载新内容

        // 这里加载数据..

        }

     });

}

PS:这里再为大家推荐一款关于JS事件的在线查询工具,归纳总结了JS常用的事件类型与函数功能:

javascript事件与功能说明大全:

Javascript 相关文章推荐
js option删除代码集合
Nov 12 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
js实现数组转换成json
Jun 26 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
Mar 21 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 #Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 #Javascript
JavaScript获取Url里的参数
Dec 18 #Javascript
Javascript实现单张图片浏览
Dec 18 #Javascript
VS2008中使用JavaScript调用WebServices
Dec 18 #Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 #Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
Dec 18 #Javascript
You might like
人大复印资料处理程序_补充篇
2006/10/09 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
django列表筛选功能的实现代码
2020/03/27 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
医院护士的求职信范文
2013/12/26 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
《1942》观后感
2015/06/08 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL