判断滚动条到底部的JS代码


Posted in Javascript onNovember 04, 2013

判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。

scrollTop为滚动条在Y轴上的滚动距离。

clientHeight为内容可视区域的高度。

scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。

从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。

废话不多少说,赶紧上代码(兼容不同的浏览器)。

 

//滚动条在Y轴上的滚动距离
function getScrollTop(){

var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;

if(document.body){


bodyScrollTop = document.body.scrollTop;

}

if(document.documentElement){


documentScrollTop = document.documentElement.scrollTop;

}

scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;

return scrollTop;
}
//文档的总高度
function getScrollHeight(){

var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;

if(document.body){


bodyScrollHeight = document.body.scrollHeight;

}

if(document.documentElement){


documentScrollHeight = document.documentElement.scrollHeight;

}

scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;

return scrollHeight;
}
//浏览器视口的高度
function getWindowHeight(){

var windowHeight = 0;

if(document.compatMode == "CSS1Compat"){


windowHeight = document.documentElement.clientHeight;

}else{


windowHeight = document.body.clientHeight;

}

return windowHeight;
}
window.onscroll = function(){

if(getScrollTop() + getWindowHeight() == getScrollHeight()){


alert("you are in the bottom!");

}
};

如果用jquery来实现的话就更简单了,
$(window).scroll(function(){
var scrollTop = $(this).scrollTop();

var scrollHeight = $(document).height();

var windowHeight = $(this).height();

if(scrollTop + windowHeight == scrollHeight){


alert("you are in the bottom");

}
});

如果要判断在某一个元素中的滚动条是否到底部,根据类似的思想,将document.body换成特定的元素即可,获取scrollTop和scrollHeight的方式是一样的,但是获取元素可见高度需要用到offsetHeight属性,直接依葫芦画瓢即可。
Javascript 相关文章推荐
Jquery iframe内部出滚动条
Feb 11 Javascript
一个网马的tips实现分析
Nov 28 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
jQuery中layer分页器的使用
Mar 13 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
Dec 28 Javascript
解决layer.confirm快速点击会重复触发事件的问题
Sep 23 Javascript
Vue组件间数据传递的方式(3种)
Jul 13 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
jQuery实现二级导航菜单的示例
Sep 30 jQuery
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 #Javascript
js实现瀑布流的一种简单方法实例分享
Nov 04 #Javascript
jquery监听div内容的变化具体实现思路
Nov 04 #Javascript
让新消息在网页标题闪烁提示的jQuery代码
Nov 04 #Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 #Javascript
浅析return false的正确使用
Nov 04 #Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 #Javascript
You might like
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
如何利用cmp命令比较文件
2016/04/11 面试题
人事行政主管岗位职责
2013/12/22 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
放弃继承权公证书
2015/01/23 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
MySQL大小写敏感的注意事项
2021/05/24 MySQL
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python