判断滚动条到底部的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 相关文章推荐
javascript中的对象和数组的应用技巧
Jan 07 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
Mar 01 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
jQuery实现一个简单的验证码功能
Jun 26 jQuery
详解react、redux、react-redux之间的关系
Apr 11 Javascript
React Hooks 实现和由来以及解决的问题详解
Jan 17 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 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
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue组件三大核心概念图文详解
2019/05/30 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Python使用struct处理二进制的实例详解
2017/09/11 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python 面试中 8 个必考问题
2018/11/16 Python
python flask搭建web应用教程
2019/11/19 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
python怎么判断模块安装完成
2020/06/19 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server