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 相关文章推荐
kmock javascript 单元测试代码
Feb 06 Javascript
JqGrid web打印实现代码
May 31 Javascript
js如何获取file控件的完整路径具体实现代码
May 15 Javascript
javascript实用小函数使用介绍
Nov 11 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
javascript中json基础知识详解
Jan 19 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
Mac中安装nvm的教程分享
Dec 11 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
Nov 05 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
第十一节--重载
2006/11/16 PHP
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
Python之PyUnit单元测试实例
2014/10/11 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
selenium+python环境配置教程详解
2019/05/28 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
应用服务器有那些
2012/01/19 面试题
Linux开机引导的步骤是什么
2015/10/19 面试题
年度考核自我鉴定
2013/11/09 职场文书
毕业自荐信
2013/12/16 职场文书
学校督导评估方案
2014/06/10 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
2015团员个人年度总结
2015/11/24 职场文书