无法在Chrome浏览器中强制刷新页面时滚动到顶部

7
我正在尝试使用类似以下内容的方法,在刷新时强制页面滚动到顶部:

我正在尝试使用类似以下内容的方法,在刷新时强制页面滚动到顶部:

$(window).scrollTop(0);

但是似乎在自动刷新之前就发生了。我的脚本运行后,浏览器会恢复其上次的位置。
我在多个地方都运行这段代码。
        $(function(){
            $(window).scrollTop(0);
        });

        $(window).scrollTop(0);

        $(document).ready(function(){
            $(window).scrollTop(0);
        });

        $(window).on('load',function(){
            $(window).scrollTop(0);
        });

但这种情况经常发生。我需要将代码放在其他地方吗?将JS加载到HTML的特定部分?还有什么纯JS或jQuery可以帮助我解决这个问题的东西吗?

@编辑

我尝试使用$(html, body).scrollTo(0),但无法使其正常工作

我尝试了没有jQuery的方法,但什么也没发生

window.scrollTo(0,0)

我禁用了所有使用JavaScript编写的内容,只放置了这段代码,但没有任何反应。

@edit2

我之前也遇到过这个问题,我确定我用setTimeout解决了这个问题,正如@raam86建议的那样。问题是,在页面加载时我进行了一些计算,必须在用户开始上下滚动之前完成。


2
应该在 html, body 上使用 scrollTop(),而不是在 window 上。 - Hashem Qolami
没有。仍在向下滚动。不确定它是否忽略了代码,还是浏览器在页面刷新后滚动下来。我没有使用任何其他滚动页面的脚本。 - Victor Ferreira
2个回答

15

正确答案是:

window.onbeforeunload = function () {
        window.scrollTo(0,0);
};
因为Chrome和其他浏览器在卸载页面前会“记住”上次的滚动位置,所以如果在页面卸载之前将值设置为0,0,它们将记忆0,0并不会回滚到滚动条的位置 :)
只需将其粘贴到所有页面控制器上,它们就会在重新加载/刷新/其他操作时滚动到顶部。

0

尝试使用set timeout。

类似于:

var _TIMEOUT = 300
setTimeout(function(){$(window).scrollTo(0)},_TIMEOUT );

希望这将在 Chrome 滚动后触发。如果没有,请尝试调整超时时间。

是的,这应该可以工作,但当页面加载时我会进行一些数学计算,我必须修改它们(因为它必须在用户向上和向下滚动时准备好)。 - Victor Ferreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接