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'); 
        } 
});