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插件开发注意事项小结
Jun 04 Javascript
JS去除字符串两端空格的简单实例
Dec 27 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
Mar 18 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
一分钟理解js闭包
May 04 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
JS身份证信息验证正则表达式
Jun 12 Javascript
微信小程序 空白页重定向解决办法
Jun 27 Javascript
JS实现瀑布流布局
Oct 21 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
Nov 20 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 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
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
python实现画圆功能
2018/01/25 Python
Python----数据预处理代码实例
2019/03/20 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
结婚典礼证婚词
2014/01/08 职场文书
八年级生物教学反思
2014/01/22 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
教师专业自荐信
2014/05/31 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
店铺转让协议书
2015/01/29 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript