<script>
// Makes sure we jump to anchor on reload
document.addEventListener("DOMContentLoaded", function (event) {
var ele = document.getElementById(window.location.hash.substring(1));
ele.scrollIntoView();
});
// Makes sure we jump to anchor when doing back and forward
window.addEventListener('hashchange', () => {
var ele = document.getElementById(window.location.hash.substring(1));
ele.scrollIntoView();
}, false);
</script>
5条答案
按热度按时间6pp0gazn1#
我也遇到了同样的问题,请参见我的问题anchor links referring to the page sections not working on browser refresh, back and forward
但我必须按照正常链接的工作方式来做,所以我所做的是通过从散列中获取元素,手动进入该部分。
这适用于前进和后退按钮。对于刷新,你也需要做同样的事情。从散列中获取元素,然后手动滚动到该元素。
wkyowqbh2#
历史记录和后退按钮。
在过去,后退按钮只不过是回到浏览器历史记录中的上一个项目。从那以后,这一点发生了很大的变化,因为它根据一套简单的规则来保存自己的历史记录。不过,祝你好运,在标准文档中找到它。
UI/UX以及为什么不更改预期行为。
在你修改浏览器的默认行为之前,请参考w3c's 'don't brek the back-button,这是有原因的,在大量的争论和定义标准之后。
归根结底,这是浏览器的工作,也是用户的期望。如果你开始颠覆用户的期望,你很可能会开始激怒你的用户。当按钮和链接反复不表现出预期,用户往往会给予并离开你的网站。
防止默认。
如果你 * 真的 * 必须改变默认行为,使用javascript将是最好的方法:
mqkwyuun3#
http://www.the-art-of-web.com/javascript/remove-anchor-links/
访问该网站。滚动到底部并使用测试锚。它正在做你想要的。
“下面的代码将分析HTML页,并重写指向同一页上锚点的任何链接的函数。link函数将被替换为对目标元素的scrollIntoView方法的调用:
blpfk2vs4#
c86crjj05#
不用jQuery,也不用修改每个锚元素: