自动滚动到页面底部

jat*_*jat 362 javascript jquery

考虑一下我有一个问题清单.当我点击第一个问题时,它会自动将我带到页面底部.

事实上,我知道这可以使用jQuery完成.

那么,你能给我一些文件或一些链接,我可以找到这个问题的答案吗?

编辑:需要滚动到页面底部的特定HTML 元素

Zhi*_*hao 723

jQuery没有必要.我从谷歌搜索获得的大多数顶级成绩给了我这样的答案:

window.scrollTo(0,document.body.scrollHeight);
Run Code Online (Sandbox Code Playgroud)

如果您有嵌套元素,则文档可能无法滚动.在这种情况下,您需要定位滚动的元素并使用它的滚动高度.

window.scrollTo(0,document.querySelector(".scrollingContainer").scrollHeight);

您可以将其与onclick您的问题事件联系起来(即<div onclick="ScrollToBottom()" ...).

您可以查看一些其他来源:

  • 不适合我.我这样做了:`element.scrollTop = element.scrollHeight`. (24认同)
  • 2016年5月4日:请注意,"scrollTo"功能是实验性的,并不适用于所有浏览器. (6认同)
  • 这也应该有效:`objectSelector.scrollTo({ top: objectSelector.scrollHeight })`。了解“objectSelector”是“document.getElementById”返回的元素。PD:在“scrollTo”方法选项中添加“behavior: 'smooth'”设置预定义的滚动动画。 (2认同)

Tho*_*Tho 90

如果要将整个页面滚动到底部:

var scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;
Run Code Online (Sandbox Code Playgroud)

查看样品的jsfiddle

如果要将元素滚动到底部:

function gotoBottom(id){
   var element = document.getElementById(id);
   element.scrollTop = element.scrollHeight - element.clientHeight;
}
Run Code Online (Sandbox Code Playgroud)

这就是它的工作原理:

在此输入图像描述

参考:scrollTop,scrollHeight,clientHeight

更新:最新版本的Chrome(61+)和Firefox不支持滚动正文,请参阅:https://dev.opera.com/articles/fixing-the-scrolltop-bug/

  • 示例代码不起作用(chrome 63.0)对我来说 (5认同)
  • 该解决方案适用于 Chrome、Firefox、Safari 和 IE8+。查看此链接了解更多详情 http://www.quirksmode.org/dom/w3c_cssom.html (2认同)

shm*_*uli 50

香草JS实施:

element.scrollIntoView(false);
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView

  • 更好的是:`element.scrollIntoView({behavior:"smooth"});` (5认同)
  • 目前它只是Firefox (4认同)
  • 使用jQuery $('#id')[0] .scrollIntoView(false); (2认同)

小智 23

您可以使用它以动画格式向下浏览页面.

$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");
Run Code Online (Sandbox Code Playgroud)


ash*_*awg 22

仅CSS?!

一个有趣的纯 CSS 替代方案:

display: flex; 
flex-direction: column-reverse;

  /* ...probably usually along with: */

overflow-y: scroll;  /* or hidden or auto */
height: 100px; /* or whatever */
Run Code Online (Sandbox Code Playgroud)

不是防弹的,但我发现它在几种情况下很有用。

文档flex, flex-direction,overflow-y


演示:

var i=0, foo='Lorem Ipsum & foo in bar or blah ! on and'.split(' ');
setInterval(function(){demo.innerHTML+=foo[i++%foo.length]+' '},200)
Run Code Online (Sandbox Code Playgroud)
#demo{ display:flex;
       flex-direction:column-reverse;
       overflow-y:scroll;
       width:150px; 
       height:150px;
       border:3px solid black; }
body{ font-family:arial,sans-serif; 
      font-size:15px; }
Run Code Online (Sandbox Code Playgroud)
Autoscrolling demo:&#x1f43e;
<div id='demo'></div>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,当使用多个元素(如段落)显示文本时,这会在视觉呈现和 DOM 顺序之间造成脱节,这将对使用屏幕阅读器的用户产生负面影响。此类用户将无法获得正确的阅读顺序。 (3认同)

Pix*_*ech 19

下面应该是跨浏览器解决方案.它已经在Chrome,Firefox,Safari和IE11上进行了测试

window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);
Run Code Online (Sandbox Code Playgroud)

window.scrollTo(0,document.body.scrollHeight); 不适用于Firefox,至少对于Firefox 37.0.2


TLJ*_*TLJ 16

一个衬垫平滑滚动到底部

window.scrollTo({ left: 0, top: document.body.scrollHeight, behavior: "smooth" });
Run Code Online (Sandbox Code Playgroud)

向上滚动只需设置top0


NrN*_*ifi 11

您可以在任何需要调用它的地方使用此功能:

function scroll_to(div){
   if (div.scrollTop < div.scrollHeight - div.clientHeight)
        div.scrollTop += 10; // move down

}
Run Code Online (Sandbox Code Playgroud)

jquery.com:ScrollTo


小智 11

你也可以用动画做到这一点,非常简单

$('html, body').animate({
   scrollTop: $('footer').offset().top
   //scrollTop: $('#your-id').offset().top
   //scrollTop: $('.your-class').offset().top
}, 'slow');
Run Code Online (Sandbox Code Playgroud)

希望有所帮助,谢谢


Obj*_*osh 9

这是一个对我有用的方法:

预期结果:

  • 没有滚动动画
  • 首次加载时加载到页面底部
  • 所有刷新时都会加载到页面底部

代码:

<script>
    function scrollToBottom() {
        window.scrollTo(0, document.body.scrollHeight);
    }
    history.scrollRestoration = "manual";
    window.onload = scrollToBottom;
</script>
Run Code Online (Sandbox Code Playgroud)

为什么这比其他方法更有效:

Chrome 等浏览器有一个内置预设,可以在刷新后记住您在页面上的位置。只是 awindow.onload不起作用,因为在您调用以下行之后,您的浏览器会自动将您滚动回刷新之前的位置:

window.scrollTo(0, document.body.scrollHeight);
Run Code Online (Sandbox Code Playgroud)

这就是为什么我们需要添加:

history.scrollRestoration = "manual";
Run Code Online (Sandbox Code Playgroud)

首先window.onload禁用该内置功能。

参考:

文档window.onload: https: //developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload

文档window.scrollTo: https: //developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo

文档history.scrollRestoration: https: //developer.mozilla.org/en-US/docs/Web/API/History/scrollRestoration


Kon*_*ard 8

有时页面会滚动到按钮(例如在社交网络中),向下滚动到最后(页面的最终按钮)我使用此脚本:

var scrollInterval = setInterval(function() { 
    document.documentElement.scrollTop = document.documentElement.scrollHeight;
}, 50);
Run Code Online (Sandbox Code Playgroud)

如果你在浏览器的javascript控制台中,能够停止滚动可能会很有用,所以添加:

var stopScroll = function() { clearInterval(scrollInterval); };
Run Code Online (Sandbox Code Playgroud)

然后使用stopScroll();.

如果需要滚动到特定元素,请使用:

var element = document.querySelector(".element-selector");
element.scrollIntoView();
Run Code Online (Sandbox Code Playgroud)

或者用于自动滚动到特定元素的通用脚本(或停止页面滚动间隔):

var notChangedStepsCount = 0;
var scrollInterval = setInterval(function() {
    var element = document.querySelector(".element-selector");
    if (element) { 
        // element found
        clearInterval(scrollInterval);
        element.scrollIntoView();
    } else if((document.documentElement.scrollTop + window.innerHeight) != document.documentElement.scrollHeight) { 
        // no element -> scrolling
        notChangedStepsCount = 0;
        document.documentElement.scrollTop = document.documentElement.scrollHeight;
    } else if (notChangedStepsCount > 20) { 
        // no more space to scroll
        clearInterval(scrollInterval);
    } else {
        // waiting for possible extension (autoload) of the page
        notChangedStepsCount++;
    }
}, 50);
Run Code Online (Sandbox Code Playgroud)


Reg*_*Boy 6

您可以将任何附加id到链接元素的引用属性href

<a href="#myLink" id="myLink">
    Click me
</a>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,当用户单击Click me页面底部时,导航将导航到Click me自身。


Lia*_*iam 6

如果您想向下滚动到特定元素,这是一种简单的方法。

每当您想向下滚动时调用此函数。

function scrollDown() {
 document.getElementById('scroll').scrollTop =  document.getElementById('scroll').scrollHeight
}
Run Code Online (Sandbox Code Playgroud)
ul{
 height: 100px;
 width: 200px;
 overflow-y: scroll;
 border: 1px solid #000;
}
Run Code Online (Sandbox Code Playgroud)
<ul id='scroll'>
<li>Top Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Bottom Here</li>
<li style="color: red">Bottom Here</li>
</ul>

<br />

<button onclick='scrollDown()'>Scroll Down</button>
Run Code Online (Sandbox Code Playgroud)


And*_*rew 5

这么多答案试图计算文档的高度。但它对我来说计算不正确。但是,这两种方法都有效:

查询

    $('html,body').animate({scrollTop: 9999});
Run Code Online (Sandbox Code Playgroud)

或者只是js

    window.scrollTo(0,9999);
Run Code Online (Sandbox Code Playgroud)

  • @DanDascalescu 99999 (3认同)
  • 哈哈“有效”。如果[文档](https://unicode.org/emoji/charts/full-emoji-list.html)长于“9999”怎么办? (2认同)
  • @BrendonMuir如果文档长于99999,您可以在答案中的javascript代码上方定义一个javascript变量,以获取文档的动态高度,并使用该变量而不是硬编码的99999 (2认同)