浅析jquery如何判断滚动条滚到页面底部并执行事件


Posted in Javascript onApril 29, 2016

本文章向码农介绍jquery如何判断滚动条滚到页面底部并执行事件。首先理解三个dom元素,分别是:clientHeight、offsetHeight、scrollTop。

首先理解三个dom元素,分别是:clientHeight、offsetHeight、scrollTop。

clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那个这个高度则是不包括滚动条没显示出来的下面部分的内容。而只是单纯的DIV的高度。

offsetHeight:是指元素内容的高度。依照上面的,那这个高度呢就是DIV内部的高度,包括可见部分及以滚动条下面的不可见部分。

scrollTop:这个是什么呢?他可以理解为滚动条可以滚动的长度。

举例,如果一个DIV高度是400px(即clientHeight为400),而里面的内容是一个很长的列表,内容的高度是1000px(即offsetHeight为1000)。那么,可见部分我们看到400px,1000px的内容中还有600px不可见。而这不可见的部分呢,正是我们通过拉动滚动条才能把这一部分显示出来。你如果滚动条不拉动,此时scrollTop为0,如果你把滚动条拉到底,显示出列表最下面的部分,此时,scrollTop为600。 所以scrollTop的取值区间为[0, 600]。 所以这个600可以理解为滚动条可以滚动的长度。

理解完上面的这个概念之后。要判断是否滚动到底部就很好做了。

首先,我们拉动滚动条,从最上面拉到最下面,变化的是scrollTop的值,而这个值是有一个区间的。
这个区间是: [0, (offsetHeight - clientHeight)]
即,滚动条拉动的整个过程的变化在 0 到 (offsetHeight ? clientHeight) 范围之内。

1、判断滚动条滚动到最底端: scrollTop == (offsetHeight ? clientHeight)
2、在滚动条距离底端50px以内: (offsetHeight ? clientHeight) ? scrollTop <= 50
3、在滚动条距离底端5%以内: scrollTop / (offsetHeight ? clientHeight) >= 0.95

如上。
如果要实现拉到底部自动加载内容。只要注册个滚动条事件:

scrollBottomTest =function(){
   $("#contain").scroll(function(){
     var $this =$(this),
     viewH =$(this).height(),//可见高度
     contentH =$(this).get(0).scrollHeight,//内容高度
     scrollTop =$(this).scrollTop();//滚动高度
    //if(contentH - viewH - scrollTop <= 100) { //到达底部100px时,加载新内容
    if(scrollTop/(contentH -viewH)>=0.95){ //到达底部100px时,加载新内容
    // 这里加载数据..
    }
   });
}

以上这篇浅析jquery如何判断滚动条滚到页面底部并执行事件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
DOM精简教程
Oct 03 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
Nov 30 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
vue+webpack 更换主题N种方案优劣分析
Oct 28 Javascript
JS实现长图上下滚动效果
Mar 19 Javascript
vue proxy 的优势与使用场景实现
Jun 15 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
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 #Javascript
You might like
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP安全下载文件的方法
2016/04/07 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
深入理解vue $refs的基本用法
2017/07/13 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
jquery无缝图片轮播组件封装
2020/11/25 jQuery
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
实例讲解python函数式编程
2014/06/09 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Sanic框架应用部署方法详解
2018/07/18 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
电信专业应届生自荐信
2013/09/28 职场文书
会计专业求职信
2014/08/10 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
顶岗实习计划书
2015/01/16 职场文书
四年级数学教学反思
2016/02/16 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
MySQL详细讲解变量variables的用法
2022/06/21 MySQL