【发布时间】:2015-01-09 15:18:04
【问题描述】:
我知道这个问题已经在 stackoverflow 上,我也从这里得到了我的解决方案。但是还是有一点小问题。
我有一个固定在顶部的小子菜单,所以当我点击一个锚链接时,我希望在子菜单之后有一个锚。
首先是我的代码,这在大多数情况下都有效:
function offsetSubmenu() {
if(location.hash.length !== 0) {
window.scrollTo(window.scrollX, window.scrollY - submenuHeight);
}
}
$(window).on("hashchange", function () {
offsetSubmenu();
});
window.setTimeout(function() {
offsetSubmenu();
}, 1);
您会看到代码在页面加载时执行一次,并且每次 url 中的哈希值发生变化。到目前为止它有效。问题是当哈希不改变时。例如,当您单击第一个 Hashlink 时,滚动并再次单击该链接,哈希不会改变,因此 windowsscroll 会跳转到没有子菜单偏移量的锚点。
clicklistener 不起作用,因为$("a").click(..) 在浏览器跳转到锚点之前执行。
知道在主题标签不变的情况下如何处理锚点的偏移量吗?
【问题讨论】:
-
您是否尝试过在
$("a").click(...)上使用setTimeout(offsetSubmenu, 1)? (和第一次执行offsetSubmenu一样) -
@AlvaroMontoro 非常好。写在答案中,我会标记它。
标签: javascript jquery css html