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 冒泡排序 正序和倒序实现代码
Dec 14 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
HTML页面登录时的JS验证方法
May 28 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
vue-cli构建项目使用 less的方法
Oct 04 Javascript
小程序实现多列选择器
Feb 15 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
详解vue-router的导航钩子(导航守卫)
Nov 02 Javascript
js基础语法与maven项目配置教程案例
Jul 15 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
PHP获取网站域名和地址的代码
2008/08/17 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
vue登录注册实例详解
2019/09/14 Javascript
详解vue高级特性
2020/06/09 Javascript
python: 自动安装缺失库文件的方法
2018/10/22 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
应用心理学个人的求职信
2013/12/08 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
中学生英语演讲稿
2014/04/26 职场文书
优秀求职信
2014/05/29 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
五一劳动节慰问信
2015/02/14 职场文书
队名及霸气口号大全
2015/12/25 职场文书
《称赞》教学反思
2016/02/17 职场文书
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android