【问题标题】:Avoid the page scrolling/jumping when anchor is in the URL [duplicate]当锚点位于 URL 中时,避免页面滚动/跳转 [重复]
【发布时间】:2012-05-24 12:05:59
【问题描述】:

可能重复:
jquery - disable anchor “jump” when loading a page

我根据 URL 中的哈希值显示一个 div,但我想避免页面跳转到具有该特定 ID 的那个 div 的位置。

我只有在使用 URL 中的哈希直接导航页面时才会遇到问题,例如,如果有人用书标记了该页面。

例如,我有网址 domain.com/page.html#myitem-1

ID=myitem-1 然后会显示,它会显示,但页面会跳到我不想要的那个 div 的位置。

我试图使用 scrollTop(0) 来强制窗口位置回到顶部,但似乎在锚点跳转发生之前调用它没有任何效果

示例代码:

  $(document).ready(function() {
    $('.glossary-term').hide();
    $(window.location.hash).show();

    $(window).scrollTop(0);

});

我能够让这个 scrollTop 工作的唯一方法是将它放在一个持续时间为 1 的 setTimeOut 中,但这似乎有点像 hack。还有其他建议吗?

谢谢

B

【问题讨论】:

  • 谢谢大家认为点击赞成票就足够了。一些没有真正帮助的答案我只是忽略它们吗?我通常会回复评论,但没有跟进。再次感谢。
  • 嗨,Ben,请问你是怎么解决的?我有同样的问题

标签: javascript jquery anchor


【解决方案1】:

好吧,如果这是您使用锚点仅用于显示 div 的内部机制,您可以随时更改(或删除)“名称”属性,这样浏览器就不会直接找到它,也不会尝试滚动;)

否则试试How to disable anchor "jump" when loading a page?

【讨论】:

  • 感谢回复,其实没有name标签,它跳到那里是因为DIV有那个ID。我想严格来说它不是这样但相同功能的锚。我想保留 ID,因为这意味着当 JS 被禁用时它会很好地降级。该链接看起来与我使用 setTimeOut 尝试的想法相同,但确实有点像黑客,也许不是,也是唯一的方法。
  • 好吧,如果你设置了一个锚点,浏览器会尝试跟随它,所以你必须以某种方式破解它。你有没有尝试在页面加载时重置你的锚点?就像 'window.location.hash = "";'或 'window.location.hash = "top";'
  • 您是否尝试过在页面加载时重置锚点?就像 'window.location.hash = "";'或'window.location.hash = "top";' $(document).ready(function() { $('.glossary-term').hide(); $(window.location.hash).show(); window.location.hash = ""; $(window ).scrollTop(0); });
  • 感谢 Majki,这确实有效,但问题是 URL 然后变得无法添加书签,所以我想我会将 scrollTop 包装到 setTimeOut 中。但是会将其标记为已回答,因为您在上面的评论和答案中的链接都有帮助。
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多