判断滚动条到底部的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 相关文章推荐
js 巧妙去除数组中的重复项
Jan 25 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
js判断屏幕分辨率的代码
Jul 16 Javascript
jquery实现图片滚动效果的简单实例
Nov 23 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
React中嵌套组件与被嵌套组件的通信过程
Jul 11 Javascript
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 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上传文件,创建递归目录的实例代码
2013/10/18 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
Python表示矩阵的方法分析
2017/05/26 Python
python url 参数修改方法
2018/12/26 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
WiFi云数码相框:Nixplay
2018/07/05 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
PHP面试题及答案一
2012/06/18 面试题
中学教师培训制度
2014/01/31 职场文书
银行求职自荐书
2014/06/25 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
Python Matplotlib绘制条形图的全过程
2021/10/24 Python