如何使用JQuery检查div是否一直滚动到底部?

TIM*_*MEX 38 javascript jquery

我有一个溢出的div:滚动.

我想知道它目前是否一直向下滚动.怎么用JQuery?

这个不起作用:如何确定div是否滚动到底部?

sam*_*one 71

这是正确的解决方案(jsfiddle).简要介绍一下代码:

$(document).ready(function () {
    $('div').bind('scroll', chk_scroll);
});

function chk_scroll(e) {
    var elem = $(e.currentTarget);
    if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
        console.log("bottom");
    }
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅

  • 这是一个令人讨厌的`alert()`的演示:http://jsfiddle.net/Blender/aBc3h/7/ (9认同)
  • 在Chrome中,当浏览器缩放时,像素数可以是浮动的(例如33.3334216 ........).要处理这个问题,你可以检查小于一个像素的差异,例如:`if(Math.abs(elem [0] .scrollHeight - elem.scrollTop() - elem.outerHeight())<1) (8认同)
  • 我相信这个例子应该使用"innerHeight"而不是"outerHeight",否则它将无法使用border> 0px. (5认同)
  • 这是一个很好的解决方案。我正在研究一个解决方案,其中包含内容的 div 可调整大小,每次调整 div 大小时我都需要重新检查滚动状态,因为它不会每次都触发。有活动吗? (2认同)

Chr*_*tin 13

function isScrolledToBottom(el) {
    var $el = $(el);
    return el.scrollHeight - $el.scrollTop() - $el.outerHeight() < 1;
}
Run Code Online (Sandbox Code Playgroud)

这是@samccone的答案的变体,其中包含@ HenrikChristensen关于亚像素测量的评论.

  • 这是唯一可以在Chrome中正常运行的答案.有了其他答案,它有时可以在Chrome中运行,有时则不行(Firefox没有这个子像素问题,无论如何都能正常工作). (2认同)

nha*_*nha 6

因为它可以在没有 jQuery 的情况下工作:

 var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight;
Run Code Online (Sandbox Code Playgroud)

我愿意 :

 var node = $('#mydiv')[0]; // gets the html element
 if(node) {
    var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight;
 }
Run Code Online (Sandbox Code Playgroud)