Javascript window.Scroll在window.onload之后无法持续工作(计时问题?)

Javascript window.Scroll在window.onload之后无法持续工作(计时问题?),javascript,dom-events,Javascript,Dom Events,我希望有人能向我解释一下我在window.scrollTo上看到的这种奇怪行为。 这不管用 document.addEventListener('DOMContentLoaded', function() { console.log('window.scrollY = ', window.scrollY); window.scrollTo(0, 200) console.log('window.scrollY = ', window.scrollY); }); 。。。嗯

我希望有人能向我解释一下我在window.scrollTo上看到的这种奇怪行为。

这不管用

document.addEventListener('DOMContentLoaded', function() {
    console.log('window.scrollY = ', window.scrollY);
    window.scrollTo(0, 200)
    console.log('window.scrollY = ', window.scrollY);
});
。。。嗯,它确实有效,有点

它适用于初始页面加载,但不刷新(
cmd+shift+r
)…

控制台输出为:

window.scrollY = 0
window.scrollY = 200
所以从这个意义上说,它的工作除了页面不会滚动,当您键入
窗口时。将
滚动到开发人员控制台中,确实会显示
0

所以滚动设置得太早了吗?

我真正感到困惑的是:

var delay_ms = 0;

document.addEventListener('DOMContentLoaded', function() {
    setTimeout(function() {
        window.scrollTo(0, 200);
    }, delay_ms);
});
某种程度上,这是可行的,但并非始终如一

然而

var delay_ms = 10;
增加延迟,即使只增加10毫秒,也会显著提高性能!到了我还没有失败的地步

起初,我认为对于身高来说,
DOMContentLoaded
可能太早,无法正确评估,因此我将我正在收听的事件切换到:

window.addEventListener('load', function() { /* ... */ });
根据

加载事件在文档加载过程结束时激发。此时,文档中的所有对象都在DOM中,所有图像、脚本、链接和子帧都已完成加载

因此,我无法想象在我将滚动设置为
200
之后,将滚动设置为
0

有人知道这个时间发生了什么吗?

掩护我的基地

  • 是的,有滚动的空间
  • 这是一个完整的复制代码
  • 我在mac电脑上,使用chrome浏览器

一些浏览器试图在页面刷新时自动将页面滚动到最后一个已知位置,不幸的是,这是在加载事件触发后发生的。请参阅一些解决方法。啊,这将解释为什么它只在重新加载时发生,而不是原始导航时发生!我想知道这与标准模式(href链接到元素ID的位置)有何关系。