jQuery滚动到页面/ iframe的底部


Answers:


360

如果您想要一个不错的慢速动画滚动,那么任何具有href="#bottom"此锚点的锚点都将您滚动到底部:

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

随时更改选择器。


48
在Firefox 3.5.7中有效,但在Chrome 4.0.295.0中无效。以下在Chrome中有效:$('html,body')。animate({scrollTop:$(document).height()},'slow');
汤姆(Tom)2010年

1
@Tom,我无法发现您的解决方案与Mark's的区别!
穆罕默德·盖尔巴纳

4
@MuhammadGelbana检查编辑日期。马克似乎更新了他的答案,以包括汤姆的解决方案。
保罗·帕克

实际上没有必要获取元素的高度:stackoverflow.com/a/44578849/1450294
Michael Scheper

210

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

$(document).height()

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

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);

29
这应该是可接受的答案,Tom绝对正确,由于滚动将突然停止而不是处理缓动的结束,因此可接受的答案不能很好地工作。
Christian

33
注意:easeOutQuint需要一个插件,jQuery本身只有linearand swing
newenglander

老兄,这是好东西!谢谢。即使使用“ swing”而不是“ easeoutquint”执行此操作也显示出明显的差异”。
杰西·赫德

不知道它的格式是否错误,但是我编辑了接受的答案以在此答案下添加一个指针。如果是这样,则有人可以还原它。
xaxxon

仅在以标准的兼容模式解释页面时,此解决方案才有效。例如,如果你不包括<!DOCTYPE html>在Chrome,Chrome将返回窗口和文档的高度值完全相同,在这种情况下$(document).height()-$(window).height()会一直在这里返回0。另请参见:stackoverflow.com/questions/12103208/...
VKK


14

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

PlanetCloud的替代方案

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

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

(感谢本)


1
与我为一个div工作:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3

您实际上必须做数学吗?stackoverflow.com/a/44578849/1450294
Michael Scheper

4

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

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}

2
我不知道为什么,但这在Firefox 26.0上对我不起作用,并且在运行此功能时会滚动到顶部。这个问题已通过说$(document).scrollTop($(document).height());
杰克

2

这个为我工作:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}

这不能回答问题
huyz

2

如果您不关心动画,则不必获取元素的高度。至少在我尝试过的所有浏览器中,如果您提供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();

0

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

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

要么

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

将无法工作Chrome浏览器,并将于Jumpy在Safari浏览器 的情况下, html标签在CSS具有overflow: auto;属性集。我花了近一个小时才弄清楚。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.