jQueryやその他のJavaScriptライブラリを使用せずに、垂直スクロールバーのあるdivが一番下までスクロールされているかどうかを確認するにはどうすればよいですか?
私の質問は、一番下までスクロールする方法ではありません。私はそれを行う方法を知っています。divがすでに一番下までスクロールされているかどうかを確認したいと思います。
これは動作しません:
if (objDiv.scrollTop == objDiv.scrollHeight)
jQueryやその他のJavaScriptライブラリを使用せずに、垂直スクロールバーのあるdivが一番下までスクロールされているかどうかを確認するにはどうすればよいですか?
私の質問は、一番下までスクロールする方法ではありません。私はそれを行う方法を知っています。divがすでに一番下までスクロールされているかどうかを確認したいと思います。
これは動作しません:
if (objDiv.scrollTop == objDiv.scrollHeight)
回答:
を使用してかなり近いです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
境界線、水平スクロールバー、フローティングピクセル数などを考慮して正しい結果を得るには、次を使用する必要があります...
el.scrollHeight - el.scrollTop - el.clientHeight < 1
注:正しい結果を得るには、offsetHeightの代わりにclientHeightを使用する必要があります。offsetHeightは、elに境界線または水平スクロールバーがない場合にのみ正しい結果を提供します
@scroll="scrolling"
から、メソッドで使用することもできます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');
}
});