一个用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 相关文章推荐
浅析JS中document对象的一些重要属性
Mar 06 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
Vue.js基础知识汇总
Apr 27 Javascript
js实现纯前端的图片预览
Apr 27 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
Jun 17 Javascript
分享JS数组求和与求最大值的方法
Aug 11 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
Mar 01 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
阿望教你用vue写扫雷小游戏
Jan 20 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+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python删除特定文件的方法
2015/07/30 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
群胜软件Java笔试题
2012/09/29 面试题
工商企业管理实习自我鉴定
2013/12/04 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
合作经营协议书范本
2014/09/16 职场文书
2014最新实习证明模板
2014/10/02 职场文书
2016年元旦致辞
2015/08/01 职场文书
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS