window.scroll在window.onload(定时问题?)之后不能一直工作

时间:2016-12-19 17:17:32

标签: 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);
});

......它确实有效,有点......

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

控制台输出是:

window.scrollY = 0
window.scrollY = 200

所以在这个意义上它的工作...... 除了页面没有滚动,当你在开发控制台中输入window.scrollY时,确实会显示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() { /* ... */ });

根据MDN Docs for .onload

  

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

所以我无法想象在我将其设置为0之后将滚动条设置为200 ...

有没有人对此时间发生的事情有任何了解?

覆盖我的基地

  • 是的,有空间可以滚动。
  • 这是gist,其中包含一些完整的复制代码。
  • 我在Mac上,使用chrome。

0 个答案:

没有答案