232

如何使用 jquery 向下滚动到 iframe 或页面的底部?

4

9 回答 9

367

如果您想要一个不错的慢速动画滚动,对于任何带有href="#bottom"此功能的锚点都会将您滚动到底部:

$("a[href='#bottom']").click(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, "slow");
  return false;
});

随意更改选择器。

于 2009-12-11T22:00:58.650 回答
214

scrollTop() 返回从可滚动区域的视图中隐藏的像素数,因此给它:

$(document).height()

实际上会超出页面底部。为了使滚动真正“停止”在页面底部,需要减去浏览器窗口的当前高度。如果需要,这将允许使用缓动,所以它变成:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);
于 2011-05-06T09:20:58.637 回答
35

例如:

$('html, body').scrollTop($(document).height());
于 2009-12-11T21:32:55.650 回答
15

在此线程无法满足我的特定需求(在特定元素内滚动,在我的情况下为文本区域)之后,我发现了这一点,这可能对阅读此讨论的其他人有所帮助:

行星云上的替代方案

因为我已经有了我的 jQuery 对象的缓存版本(myPanel下面的代码是 jQuery 对象),所以我添加到我的事件处理程序的代码就是这样的:

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(感谢本)

于 2011-09-30T15:03:32.243 回答
4

一个简单的函数,可以跳转(立即滚动)到整个页面的底部。它使用内置的.scrollTop(). 我没有尝试将其调整为适用于单个页面元素。

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}
于 2013-09-20T19:33:33.510 回答
4

如果您不关心动画,那么您不必获取元素的高度。至少在我尝试过的所有浏览器中,如果你给出scrollTop的数字大于最大值,它只会滚动到底部。所以给它尽可能大的数字:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

如果你想滚动页面,而不是带有滚动条的元素,只需myScrollingElement设置为'body,html'。

由于我需要在几个地方执行此操作,因此我编写了一个快速而肮脏的 jQuery 函数以使其更方便,如下所示:

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

所以当我附加一堆东西时我可以这样做:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();
于 2017-06-16T00:09:14.327 回答
2

这个对我有用:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}
于 2012-11-07T16:42:51.793 回答
1
$('.block').scrollTop($('.block')[0].scrollHeight);

当新消息到达时,我使用此代码滚动聊天。

于 2020-06-14T20:19:22.287 回答
0

先前答案中提到的脚本,例如:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

或者

$(window).scrollTop($(document).height());

不会Chrome中工作,并且会在Safari 中跳跃,以防 CSS中的html标签设置了属性。我花了将近一个小时才弄清楚。overflow: auto;

于 2016-10-23T11:32:34.010 回答