在不使用jQuery或任何其他JavaScript库的情况下,如何确定带有垂直滚动条的div是否一直滚动到底部?
我的问题不是如何滚动到底部。我知道该怎么做。我想确定div是否已滚动到底部。
这不起作用:
if (objDiv.scrollTop == objDiv.scrollHeight)
在不使用jQuery或任何其他JavaScript库的情况下,如何确定带有垂直滚动条的div是否一直滚动到底部?
我的问题不是如何滚动到底部。我知道该怎么做。我想确定div是否已滚动到底部。
这不起作用:
if (objDiv.scrollTop == objDiv.scrollHeight)
Answers:
您即将使用scrollTop == scrollHeight
。
scrollTop
指的是滚动位置的顶部,即 scrollHeight - offsetHeight
您的if语句应如下所示(不要忘记使用三元等于):
if( obj.scrollTop === (obj.scrollHeight - obj.offsetHeight))
{
}
编辑:更正了我的答案,是完全错误的
scrollTop
可以是非整数的,因此obj.scrollHeight - obj.offsetHeight - obj.scrollTop < 1
在任何情况下都需要一定的容忍度(例如)。参见stackoverflow.com/questions/5828275/…–
document.body.scrollHeight
等于document.body.offsetHeight
(Chrome)
为了在考虑诸如边框,水平滚动条和/或浮动像素数之类的问题时获得正确的结果,应使用...
el.scrollHeight - el.scrollTop - el.clientHeight < 1
注意:如果要获得正确的结果,必须使用clientHeight而不是offsetHeight。仅当el没有边框或水平滚动条时,offsetHeight才能为您提供正确的结果
@scroll="scrolling"
中将其与Vue一起使用,然后使用以下方法:scrolling(event) { event.target // as el in the answer }
祝您好运
这次聚会来得不晚,但是当...时,上述答案似乎都不是特别有效。
为了适应所有可能的情况,您需要四舍五入计算出的滚动位置:
Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight
如果元素在其滚动的末尾,则返回true;否则,返回false。
element.scrollHeight - element.scrollTop === element.clientHeight
document.body.scrollHeight
并且document.bodyclientHeight
具有相同的值,因此该表达式永远不会为真。
<!DOCTYPE HTML>
<html>
<head>
<title>JQuery | Detecting when user scrolls to bottom of div.
</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<body style="text-align:center;" id="body">
<h1 style="color:green;">
Data Center
</h1>
<p id="data_center" style="font-size: 17px; font-weight: bold;"></p>
<center>
<div class="div" style="width:200px; height:150px; overflow:auto;">
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
<h1>Hello Friends</h1>
</div>
</center>
<script>
$('#data_center').text('Scroll till bottom to get alert!');
jQuery(function($) {
$('.div').on('scroll', function() {
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
alert('End of DIV has reached!');
}
});
});
</script>
</body>
</html>
我希望它对我有用,对您也有帮助。谢谢。
好吧,我问自己也是一样,然后我发现了这种方式,在这里我举了一个使用事件的例子:
let scrollableElement = document.querySelector(".elementScrollable")
scrollableElement.addEventListener("scroll",function(event){
if(event.target.scrollTop === event.target.scrollTopMax){
console.log("The scroll arrived at bottom")
}
})
这对我有用。略有不同的方法。
if (list.scrollTop + list.clientHeight >= list.scrollHeight - 1) {
return 'scrollOnTheBottom';
}
我在https://www.geeksforgeeks.org/how-to-detect-when-user-scrolls-to-the-bottom-of-a-div/上找到的解决方案对我有用,希望它也对您有用。
$(window).on('scroll', function() {
if ($(window).scrollTop() >= $(
'.div').offset().top + $('.div').
outerHeight() - window.innerHeight) {
alert('You reached the end of the DIV');
}
});