当散列发生变化时,可以通过以下函数防止跳到散列,例如:
function handleHashChange() {
const scrollY = window.pageYOffset;
window.scrollTo({top: scrollY});
}
但只有当稍后更改哈希时,这才有效。当加载一个URL且已经包含哈希的页面时,这将不起作用。(例如:mysite.com/posts/#popular(我想可能是因为在添加自定义hashchange
事件侦听器之前,本机hashchange
事件已发送到回调队列。
这个问题有什么解决办法吗?
因此,似乎所需要做的就是在load
事件侦听器中调用滚动函数:
window.addEventListener('load',()=>{
const scrollY = window.pageYOffset;
setTimeout(() => {
window.scrollTo({top: scrollY});
}, 0);
});