Javascript 为什么调用window后页面会滚动到顶部。滚动到(…)时Y值为非零
我正在观察奇怪的行为,我相信我可以排除一些常见的原因。 我需要实现滚动位置恢复回到单页应用程序(在角度) 首先,我需要说的是,为了调试的目的,我在主体上有类似style=“min height:8000px!important;”的东西,以确保始终有足够的空间,并且viewport不比请求的滚动短 history.scrollRestoration设置为“手动” 我只是在用户返回时调用window.scrollTo(0,Y)。 有时它工作得很好,有时它被滚动到顶部(并且浏览器发出的滚动事件也显示scoll为0),我找不到为什么它正常以及为什么不正常的线索/ 代码看起来像Javascript 为什么调用window后页面会滚动到顶部。滚动到(…)时Y值为非零,javascript,scroll,Javascript,Scroll,我正在观察奇怪的行为,我相信我可以排除一些常见的原因。 我需要实现滚动位置恢复回到单页应用程序(在角度) 首先,我需要说的是,为了调试的目的,我在主体上有类似style=“min height:8000px!important;”的东西,以确保始终有足够的空间,并且viewport不比请求的滚动短 history.scrollRestoration设置为“手动” 我只是在用户返回时调用window.scrollTo(0,Y)。 有时它工作得很好,有时它被滚动到顶部(并且浏览器发出的滚动事件也显示
window.addEventListener('scroll', function (e: any): void {
console.log('window scrolled to ' + window.scrollY);
});
// called with resored Y value
function onNavigateBack(y) {
console.log("Before " + window.scrollY)
console.log("Calling scroll to y = " + y)
window.scrollTo(0, y)
console.log("After " + window.scrollY)
}
假设保存的值为y=470,则输出为
Before ... (there is actual value)
Calling scroll to y = 470
After 470
.... route is initialized there ...
window scrolled to 0
观察
- 没有其他window.scroll调用两个window.scroll(通过模拟验证)
- 当未调用scrollTo时,则在错误情况下滚动到顶部未发生->无效滚动到顶部是请求滚动的结果
- 未触发其他scoll事件
- Chrome和Firefox是一致的,有时可以理解
似乎成功滚动链接到小Y(如Y=200时永不失败)和大Y时失败(如Y>800px)。但是,滚动页面范围应该滚动到当前底部。这对我来说毫无意义。将Scroll包装为调用到window.RequesteAimationFrame回调似乎可以解决此问题。虽然我不知道为什么