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 相关文章推荐
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
使用JavaScript实现alert的实例代码
Jul 06 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
Jul 31 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
薪资那么高的Web前端必看书单
Oct 13 Javascript
浅谈webpack性能榨汁机(打包速度优化)
Jan 09 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 Javascript
Paypal支付不完全指北
Jun 04 Javascript
微信小程序实现聊天室功能
Jun 14 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
ADODB的数据库封包程序库
2006/12/31 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php获取随机数组列表的方法
2014/11/13 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP闭包函数详解
2016/02/13 PHP
一些mootools的学习资源
2010/02/07 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
自荐信写法介绍
2014/01/25 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
法人委托书范本
2014/04/04 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
招标保密承诺书
2015/01/20 职场文书
技术员岗位职责范本
2015/04/11 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android