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 相关文章推荐
页面使用密码保护代码
Apr 10 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
使用js实现的简单拖拽效果
Mar 18 Javascript
概述jQuery中的ajax方法
Dec 16 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
Vue源码解析之数组变异的实现
Dec 04 Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
Mar 28 Javascript
js仿360开机效果
Dec 26 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
从源码角度来回答keep-alive组件的缓存原理
Jan 18 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
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
php数据访问之查询关键字
2016/05/09 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
详解RequireJS按需加载样式文件
2017/04/12 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
django中ImageField的使用详解
2020/12/21 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
财务部绩效考核方案
2014/05/04 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
休假证明书
2015/06/24 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang