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下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
Jul 31 Javascript
js实现上传图片之上传前预览图片
Mar 25 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
javascript拖拽应用实例
Mar 25 Javascript
javascript拖拽应用实例(二)
Mar 25 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
让你30分钟快速掌握vue3教程
Oct 26 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP积分兑换接口实例
2015/02/09 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
浅谈Python中函数的参数传递
2016/06/21 Python
python http基本验证方法
2018/12/26 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
年度考核自我鉴定
2014/02/02 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
会计求职自荐信范文
2015/03/04 职场文书
个人借条范本
2015/05/25 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python