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 实现两级导航菜单附效果图
Mar 07 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
iScroll.js 使用方法参考
May 16 Javascript
深入理解node exports和module.exports区别
Jun 01 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
初探js和简单隐藏效果的实例
Nov 23 Javascript
axios发送post请求,提交图片类型表单数据方法
Mar 16 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
vue-socket.io跨域问题有效解决方法
Feb 11 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
Aug 04 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 魔术方法详解
2014/11/11 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
jQuery的一些注意
2006/12/06 Javascript
js jquery做的图片连续滚动代码
2008/01/06 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
vue组件name的作用小结
2018/05/23 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
django如何连接已存在数据的数据库
2018/08/14 Python
Python argparse模块使用方法解析
2020/02/20 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
学校安全工作制度
2014/01/19 职场文书
大学新生军训方案
2014/05/03 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript