一个用jquery写的判断div滚动条到底部的方法【推荐】


Posted in Javascript onApril 29, 2016

jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中 scrollHeight 属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。

我们现在只探讨和垂直滚动有关的 scrollTop、scrollHeight 属性。

一、滚动条有关属性的正确理解:

假设有以下Html代码:

<div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;">
  <div style="height:750px;">
  </div>
</div>

由于内部的div标签高度比外部的长,并且外部的div允许自动出现垂直滚动条,所以用浏览器打开后,可以看到垂直滚动条。滚动条向下拖动一段距离,看到的页面效果如下(右部的a、b是我抓图后,用PS标出来的):

一个用jquery写的判断div滚动条到底部的方法【推荐】

那么,这里的外部div 的scrollTop、scrollHeight 属性到底是什么呢?

有人说,scrollTop等于图中标出的a。scrollHeight 等于外部div的高度500px。其实,都不对。

其实,图中标出的a、b,对我们编程写js代码没有任何具体意义,它仅仅具有象征意义。

实际上,在js代码里,滚动条是被抽象为一个“点”来对待的。scrollHeight其实不是“滚动条的高度”(b),而是表示滚动条需要滚动的高度,即内部div的高度750px。而scrollTop表示滚动条(一个点)当前的位置在750px里占了多少,不是图中标出的a。

这时,我们很叹服Windows的设计者,滚动条设计的如此形象美妙,欺骗了多少头脑简单的鼠标操作员。a和b的距离分别标识滚动条滚动了和需要滚动的距离,它们之间分别有一个对应的关系,但这些不是我们这些开发应用程序的程序员考虑的,是设计操作系统GUI图形接口的程序员考虑的。

2判断垂直滚动条是否到达底部

廓清了以上的概念,编码其实就比较简单了, 以下是示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>下拉滚动条滚到底部了吗?</title>
   <script language="JavaScript" src="jQuery-1.4.2.min.js" mce_src="jquery-1.4.2.min.js"></script>
   <script language="javascript">
   $(document).ready(function (){
    var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度)
    var nScrollTop = 0;  //滚动到的当前位置
    var nDivHight = $("#div1").height();

    $("#div1").scroll(function(){
     nScrollHight = $(this)[0].scrollHeight;
     nScrollTop = $(this)[0].scrollTop;
     if(nScrollTop + nDivHight >= nScrollHight)
      alert("滚动条到底部了");
     });
   });
   </script>
  <body>
  <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;">
   <div style="background-color:#ccc; height:750px;">IE 和 FF 下测试通过</div>
  </div>
  </body>
  </html>

代码解说:

内部div高度为750,外部div高度为500,所以垂直滚动条需要滚动750-500=250的距离,就会到达底部,参见语句nScrollTop + nDivHight >= nScrollHight。

程序中,在外部div的scroll(滚动)事件中侦测和执行if判断语句,是非常消耗CPU资源的。用鼠标拖拉滚动条,只要有一个像素的变动就会触发该事件。但点击滚动条两头的箭头,事件触发的频率会低得多。所以滚动条的scroll事件要谨慎使用。

本示例判断的是没有水平滚动条的情况,在有水平滚动条时,情况会有细小的变化,所以nScrollTop + nDivHight >= nScrollHight语句中,需要用“>=”比较运算符,而没有水平滚动条的时候,等号“=”就足够了。大家可以实际测试一下。还可以判断水平滚动条是否滚动到头了。

以上这篇一个用jquery写的判断div滚动条到底部的方法【推荐】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
Mar 04 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
Aug 06 Javascript
SOSO地图JS画出标注和中心点以html形式运行
Aug 09 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
谈谈javascript中使用连等赋值操作带来的问题
Nov 26 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
Angular异步变同步处理方法
Aug 13 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
Dec 18 Javascript
使用localStorage替代cookie做本地存储
Sep 25 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 #Javascript
jQuery中数据缓存$.data的用法及源码完全解析
Apr 29 #Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 #Javascript
深入剖析JavaScript中的函数currying柯里化
Apr 29 #Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 #Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 #Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
Apr 29 #Javascript
You might like
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
Python 除法小技巧
2008/09/06 Python
python实现的解析crontab配置文件代码
2014/06/30 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Python函数中的可变长参数详解
2019/09/12 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
MYSQL基础面试题
2012/05/13 面试题
班级聚会策划书
2014/01/16 职场文书
产品推广策划方案
2014/05/10 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript
Python实现为PDF去除水印的示例代码
2022/04/03 Python
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技