【问题标题】:Set offset when click on anchor with fixed header单击具有固定标题的锚点时设置偏移量
【发布时间】: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


【解决方案1】:

如果$("a").click(...)在浏览器跳转到锚点之前执行,则在offsetMenu调用中添加一个小延迟,使其在跳转后执行。比如:

setTimeout(offsetSubmenu, 1)

(和第一次执行offsetSubmenu的方法一样)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2023-03-26
    相关资源
    最近更新 更多