监听滚动条事件

以前博主并不知道滚动条是怎样的原理,看了一篇博客,明白了滚动条滚动的原理,下面我来说一说滚动条的原理:

首先理解三个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可以理解为滚动条可以滚动的长度。

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

看完滚动条的原理之后,我就用了上次那个niceScroll的插件,其实那个插件就是把原生的滚动条改了样式,其实实质还是原生滚

动条,不过它用jQuery把它的兼容性做的很好了,现在演示代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		#d1{
			width: 200px;
			height:300px;
			overflow: auto;
			border:1px solid #ddd;
			margin: auto;
			padding:10px;
		}
		#d2,#d3{
			height:1000px;
		}
	</style>
</head>
<body>
	<div id = "d2">
		
	</div>
	<div id = "d1">
		<div id = "d4">
			Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
		tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
		quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
		consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
		cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
		proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
		Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
		tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
		quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
		consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
		cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
		proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
		</div>
	</div>
	<div id = "d3">
		
	</div>
	<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
	<script src="https://cdn.bootcss.com/jquery.nicescroll/3.7.6/jquery.nicescroll.min.js"></script>
	<script type="text/javascript">
		$("#d1").niceScroll({
			cursorcolor: "#75BCE1",
		});
		
		console.log($("#d4").scrollHeight);
		$("#d1").scroll(function(){
			console.log($("#d1").scrollTop());
			console.log('可见高度',$("#d1").height());//容器高度
			console.log('内容高度',$("#d4").height());//内容高度
			if($("#d1").scrollTop() >= ($("#d4").height() - $("#d1").height())){
				console.log('到底部啦'); //如果滚动条滚动高度 >= 内容高度 - 容器高度,就说明到底部了
			}
		})
	</script>
</body>
</html>

但是火狐好像没有把padding算在里面,需要把padding算在里面,ok监控滚动条监听事件也搞定了!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值