一个用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 相关文章推荐
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
Sep 02 Javascript
js实现select下拉框菜单
Dec 08 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
AngularJS 单选框及多选框的双向动态绑定
Apr 20 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
vue基本使用--refs获取组件或元素的实例
Nov 07 Javascript
微信小程序实现搜索功能
Mar 10 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
原生JS实现音乐播放器
Jan 26 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 特殊字符处理函数
2008/09/05 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
Python-基础-入门 简介
2014/08/09 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
python实现多张图片拼接成大图
2019/01/15 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
Django 解决由save方法引发的错误
2020/05/21 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
资料员岗位职责
2013/11/17 职场文书
服务行业口号
2014/06/11 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
小学运动会报道稿
2014/10/04 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
检讨书范文300字
2015/01/28 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript