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+css在交互上的应用
Jul 18 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 Javascript
详解JavaScript对象类型
Jun 16 Javascript
js友好的时间返回函数
Aug 24 Javascript
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
js实现导航跟随效果
Nov 17 Javascript
JavaScript模块管理的简单实现方式详解
Jun 15 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
Apr 15 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
浅析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无限分类(树形类)的深入分析
2013/06/02 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
超级退弹代码
2008/07/07 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
Vue header组件开发详解
2018/01/26 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python中实现字符串翻转的方法
2018/07/11 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
个人承诺书怎么写
2014/05/24 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL