在 HTML 中的页面刷新时强制页面滚动位置到顶部

IT技术 javascript jquery html pageload page-refresh
2021-03-17 13:10:40

我正在建立一个网站,我用divs发布当我在页面滚动到位置 X 后刷新页面时,页面加载的滚动位置为 X。

如何强制页面在页面刷新时滚动到顶部?

  • 我能想到的是一些 JS 或 jQuery 作为onLoad()页面的函数运行设置页面滚动到顶部。但我不知道我怎么能做到这一点。

  • 更好的选择是,如果有一些属性或某些东西可以将页面加载为默认滚动位置(即在顶部),这将类似于page load,而不是page refresh

6个回答

对于简单的JavaScript 实现:

window.onbeforeunload = function () {
  window.scrollTo(0, 0);
}

@Paul12_ - 我刚刚测试了它Safari 11.0.3并且对我来说工作正常,你在使用哪一个?
2021-04-21 13:10:40
添加document.querySelector('html').style.scrollBehavior = '';也可能是必要的。如果它被设置为smooth,它可能不会在页面重新加载之前到达顶部。
2021-04-26 13:10:40
这会在 Chrome 中引发以下错误:Uncaught TypeError: Failed to execute 'scrollTo' on 'Window': parameter 1 ('options') is not an object。
2021-05-07 13:10:40
这对我不起作用。我必须从 onbeforeload 函数返回才能使其工作。
2021-05-15 13:10:40
@Iqbal——你做了什么return
2021-05-18 13:10:40

您可以使用DOM readyscrollTop方法来完成

$(document).ready(function(){
    $(this).scrollTop(0);
});
不适用于 Safari。但是这个 -> stackoverflow.com/a/18633915/102133确实如此。
2021-05-16 13:10:40

这里的答案不适用于 safari,document.ready 经常被过早地触发。

应该使用beforeunload阻止你做一些事情事件setTimeout

$(window).on('beforeunload', function(){
  $(window).scrollTop(0);
});
添加滚动功能: $('html').text(''); ,所以婴儿车将被重置
2021-05-08 13:10:40
@Userpassword 你不认为 $("html").remove() 会更好吗?
2021-05-13 13:10:40

再次,最佳答案是:

window.onbeforeunload = function () {
    window.scrollTo(0,0);
};

(这对于非 jQuery,如果您正在搜索 JQ 方法,请查找)

编辑:它的“onbeforunload”有点错误:) Chrome 和其他浏览器“记住”卸载前的最后一个滚动位置,因此如果您在卸载页面之前将该值设置为 0,0,它们将记住 0,0 并获胜不滚动回滚动条所在的位置:)

@Paul12_ Safari 需要document.documentElement.scrollTop工作。我通常同时使用两者。
2021-04-30 13:10:40

要重置窗口滚动回到顶部,$(window).scrollTop(0)在 beforeunload 事件中会起作用,但是,我在 Chrome 80 中进行了测试,它会在重新加载后返回到旧位置。

为了防止这种情况,设置history.scrollRestoration"manual"

//Reset scroll top

history.scrollRestoration = "manual";

$(window).on('beforeunload', function(){
      $(window).scrollTop(0);
});
这对我来说是最好的回应,适用于 Chrome/Linux
2021-05-05 13:10:40
这太棒了。在多页的情况下,在我使第二页可见后,将两行history.scrollRestoration = "manual";添加$(window).scrollTop(0);到 js 函数中。
2021-05-07 13:10:40