判断滚动条到底部的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 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
jquery插件corner实现圆角边框的方法
Mar 09 Javascript
JavaScript使用Prototype实现面向对象的方法
Apr 14 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
jQuery序列化表单成对象的简单实现
Nov 29 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
在React中如何优雅的处理事件响应详解
Jul 24 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
详解TypeScript中的类型保护
Apr 29 Javascript
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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
获得Google PR值的PHP代码
2007/01/28 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
python妙用之编码的转换详解
2017/04/21 Python
python基础之入门必看操作
2017/07/26 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python用for循环求和的方法总结
2019/07/08 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
html5的localstorage详解
2017/05/09 HTML / CSS
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
春秋淹城导游词
2015/02/11 职场文书
人民检察院起诉书
2015/05/20 职场文书
统招统分证明
2015/06/23 职场文书