js判断滚动条是否已到页面最底部或顶部实例


Posted in Javascript onNovember 20, 2014

本文实例讲述了js判断滚动条是否已到页面最底部或顶部的方法。分享给大家供大家参考。具体分析如下:

我们经常会看到很多的网站一个返回顶部效果就是当我们滚动条到指定位置时返回顶部出来了,否则就自动隐藏了,下面就来给大家介绍这种效果实现原理与方法。

当可视区域小于页面的实际高度时,判定为出现滚动条,即:

if (document.documentElement.clientHeight < document.documentElement.offsetHeight) scroll = true;

要使用 document.documentElement ,必须在页面头部加入声明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 
其实,这段代码是不起作用的,因为他没考虑到一个问题,就是浏览器的边框,当我们在获取页面的offsetHeight高度时是包括了浏览器的边框的,浏览器的边框是2个像素,所以这时无论在任何情况下clientHeight 始终是小于offsetHeight的,这就使得即使没有滚动条它也为true,因此我们要修正这个错误,代码应该这样改,在offsetHeight上减去4个像素,即:
if (document.documentElement.clientHeight < document.documentElement.offsetHeight-4){

//执行相关脚本。

}

还有,这里要搞清楚,上面这代码是判断横向滚动条的,我们一般要判断的是纵向滚动,代码如下:
if (document.documentElement.clientWidth < document.documentElement.offsetWidth-4){

//执行相关脚本。

}

判断滚动条是否已拉到页面最底部,可以用如下代码

window.onscroll = function (){

var marginBot = 0;

if (document.documentElement.scrollTop){

marginBot = document.documentElement.scrollHeight ? (document.documentElement.scrollTop+document.body.scrollTop)-document.documentElement.clientHeight;

} else {

marginBot = document.body.scrollHeight ? document.body.scrollTop- document.body.clientHeight;

}

if(marginBot<=0) {

//do something

}

}

示例2

在网上找的。还挺兼容浏览器的。奇怪的是我在文档里面没找到相关信息。代码贴出来吧。

/********************

* 取窗口滚动条高度 

******************/

function getScrollTop()

{

    var scrollTop=0;

    if(document.documentElement&&document.documentElement.scrollTop)

    {

        scrollTop=document.documentElement.scrollTop;

    }

    else if(document.body)

    {

        scrollTop=document.body.scrollTop;

    }

    return scrollTop;

}
/********************

* 取窗口可视范围的高度 

*******************/

function getClientHeight()

{

    var clientHeight=0;

    if(document.body.clientHeight&&document.documentElement.clientHeight)

    {

        var clientHeight = (document.body.clientHeight<document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;        

    }

    else

    {

        var clientHeight = (document.body.clientHeight>document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;    

    }

    return clientHeight;

}

/********************

* 取文档内容实际高度 

*******************/

function getScrollHeight()

{

    return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);

}

  function test(){

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

  alert("到达底部");

 }else{

  alert("没有到达底部");

 }

}

补充:

DTD已声明:

IE
document.documentElement.scrollHeight  浏览器所有内容高度 ,document.body.scrollHeight  浏览器所有内容高度
document.documentElement.scrollTop  浏览器滚动部分高度,document.body.scrollTop 始终为0
document.documentElement.clientHeight  浏览器可视部分高度,document.body.clientHeight  浏览器所有内容高度

FF
document.documentElement.scrollHeight  浏览器所有内容高度 ,document.body.scrollHeight  浏览器所有内容高度
document.documentElement.scrollTop  浏览器滚动部分高度,document.body.scrollTop 始终为0
document.documentElement.clientHeight 浏览器可视部分高度,document.body.clientHeight  浏览器所有内容高度

Chrome
document.documentElement.scrollHeight  浏览器所有内容高度, document.body.scrollHeight  浏览器所有内容高度
document.documentElement.scrollTop 始终为0,document.body.scrollTop  浏览器滚动部分高度
document.documentElement.clientHeight  浏览器可视部分高度,document.body.clientHeight  浏览器所有内容高度

DTD未声明:

IE
document.documentElement.scrollHeight  浏览器可视部分高度,document.body.scrollHeight  浏览器所有内容高度
document.documentElement.scrollTop 始终为0,document.body.scrollTop  浏览器滚动部分高度
document.documentElement.clientHeight 始终为0,document.body.clientHeight  浏览器可视部分高度

FF
document.documentElement.scrollHeight  浏览器可视部分高度, document.body.scrollHeight 浏览器所有内容高度
document.documentElement.scrollTop 始终为0,document.body.scrollTop 浏览器滚动部分高度
document.documentElement.clientHeight 浏览器所有内容高度,document.body.clientHeight 浏览器可视部分高度

Chrome
document.documentElement.scrollHeight 浏览器可视部分高度,document.body.scrollHeight 浏览器所有内容高度
document.documentElement.scrollTop 始终为0,document.body.scrollTop 浏览器滚动部分高度
document.documentElement.clientHeight 浏览器所有内容高度,document.body.clientHeight 浏览器可视部分高度

浏览器所有内容高度即浏览器整个框架的高度,包括滚动条卷去部分+可视部分+底部隐藏部分的高度总和

浏览器滚动部分高度即滚动条卷去部分高度即可视顶端距离整个对象顶端的高度。
看懂了上面的参数我们就可以做出兼容ie,ff,chrome浏览器的滚动效果了。

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
解决vue里碰到 $refs 的问题的方法
Jul 13 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 Javascript
js中数组排序sort方法的原理分析
Nov 20 #Javascript
javascript继承机制实例详解
Nov 20 #Javascript
jQuery验证插件 Validate详解
Nov 20 #Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 #Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
Nov 19 #Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 #Javascript
jQuery Ajax()方法使用指南
Nov 19 #Javascript
You might like
php中Socket创建与监听实现方法
2015/01/05 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
js获取提交的字符串的字节数
2009/02/09 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
bootstrap table实例详解
2017/01/06 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
python numpy格式化打印的实例
2018/05/14 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
flask 实现token机制的示例代码
2019/11/07 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
python操作redis数据库的三种方法
2020/09/10 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
历史教育专业个人求职信
2013/12/13 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
门面房租房协议书
2014/08/20 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
2016猴年春节问候语
2015/11/11 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Python函数中的不定长参数相关知识总结
2021/06/24 Python
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers