Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么调用window后页面会滚动到顶部。滚动到(…)时Y值为非零_Javascript_Scroll - Fatal编程技术网

Javascript 为什么调用window后页面会滚动到顶部。滚动到(…)时Y值为非零

Javascript 为什么调用window后页面会滚动到顶部。滚动到(…)时Y值为非零,javascript,scroll,Javascript,Scroll,我正在观察奇怪的行为,我相信我可以排除一些常见的原因。 我需要实现滚动位置恢复回到单页应用程序(在角度) 首先,我需要说的是,为了调试的目的,我在主体上有类似style=“min height:8000px!important;”的东西,以确保始终有足够的空间,并且viewport不比请求的滚动短 history.scrollRestoration设置为“手动” 我只是在用户返回时调用window.scrollTo(0,Y)。 有时它工作得很好,有时它被滚动到顶部(并且浏览器发出的滚动事件也显示

我正在观察奇怪的行为,我相信我可以排除一些常见的原因。 我需要实现滚动位置恢复回到单页应用程序(在角度)

首先,我需要说的是,为了调试的目的,我在主体上有类似style=“min height:8000px!important;”的东西,以确保始终有足够的空间,并且viewport不比请求的滚动短

history.scrollRestoration设置为“手动”

我只是在用户返回时调用window.scrollTo(0,Y)。 有时它工作得很好,有时它被滚动到顶部(并且浏览器发出的滚动事件也显示scoll为0),我找不到为什么它正常以及为什么不正常的线索/

代码看起来像

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是一致的,有时可以理解
问题是。你知道什么会导致这种行为吗?或者什么可以拦截滚动? 我首先担心的是页面在渲染之间的间隔太短,但即使使用min-height hack,页面也会保持不变

编辑:再观察一次
似乎成功滚动链接到小Y(如Y=200时永不失败)和大Y时失败(如Y>800px)。但是,滚动页面范围应该滚动到当前底部。这对我来说毫无意义。

将Scroll包装为调用到window.RequesteAimationFrame回调似乎可以解决此问题。虽然我不知道为什么