我的网页很忙,有很多小部件。有时加载需要一两秒钟。
当我从页面顶部以外的某个位置点击刷新时,我可以看到页面加载时就好像 scrollTop==0
并且在某个时候快速返回到我的原始位置。
问题是我在 .ready()
事件处理程序中进行了各种初始化,其中一些依赖于 scrollTop
和 scrollLeft
。这些初始化发生在文档返回到其原始位置之前,然后从原始位置给出无意义的结果。
将这些初始化包装在 .load()
事件处理程序中似乎也不起作用。起作用的是通过 .load()
处理程序中的 setTimeout 添加一个(相当长的)延迟。由于显而易见的原因,这是不希望的。
这表明“返回原始位置”独立于标准事件链发生,即。未在 ECMA 标准中指定或依赖于浏览器实现。
处理仅在浏览器返回到原始位置后才需要发生的初始化的最佳方法是什么?有关联事件吗?有没有什么方法可以识别刷新已经发生并且在这种情况下只会延迟?
我的所有测试都是在 Chrome 和 Firefox 中进行的。
最佳答案
“返回原始位置”行为是浏览器作为奖励添加的一项功能,而不是标准化的功能。我认为没有特定事件是“浏览器因页面刷新而滚动”事件。
但是,如果浏览器运行正常,我怀疑它应该触发 onscroll event在 window
滚动时。这必然是在页面加载事件之后(因为否则浏览器没有任何东西可以滚动到,所以我会在加载事件之后寻找滚动事件并推断页面已被浏览器滚动.
请记住,您必须成功处理页面未刷新且您未获得onscroll 事件的情况。因此,我会做的(如果可能的话)是假设页面没有滚动,然后如果您确实得到了 onscroll 事件,通过重新定位并记住新位置重新开始。在加载然后重新加载的地方有一点“闪光”,但这将处理回调的异步性质。
关于javascript - 刷新后浏览器的 "return to original position"发生在 Javascript 事件链的哪个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385877/