没有滚动或跳转HTML锚链接(HTML anchor link with no scroll or

2019-07-31 06:28发布

我有一个都具有唯一的ID是各个环节的“伪锚”。 我希望他们能够影响网址哈希值和魔法点击全部是由一些MooTools的代码来处理。 然而,当我点击链接,他们滚动到自己(或在一种情况下的顶部)。 我不想在任何地方滚动,还需要我的JavaScript执行,并在网址更新哈希值。

模拟示例代码:

<a href="#button1" id="button1">button 1</a>
<a href="#button2" id="button2">button 2</a>
<a href="#" id="reset">Home</a>

所以,如果你点击了“按钮1”链接,该链接可能是http://example.com/foo.php#button1

有没有人有任何想法? 只要有一些JavaScript返回空隙杀死滚动,但也杀死了我的JavaScript(虽然我大概可以解决与一个onclick),但更重要的是,防止在URL中的散列值来改变。

Answer 1:

我可能失去了一些东西,但为什么不给他们不同的ID?

<a href="#button1" id="button-1">button 1</a>
<a href="#button2" id="button-2">button 2</a>
<a href="#" id="reset">Home</a>

或任何约定,你更喜欢。



Answer 2:

一个锚链接的全部要点是将页面滚动到一个特定的点。 所以,如果你不希望这样的事情发生,你需要一个附加onclick处理程序,并返回false。 即使只是将其作为一个属性应该工作:

<a href="#button1" id="button1" onclick="return false">button 1</a>

的上述效果的一侧是URL本身不会改变,因为返回false将取消事件。 所以,既然你想要的网址真正改变,你可以设定window.location.hash变量所需的值(即是,你可以更改,恕不浏览器强制重新加载的URL的唯一属性)。 你也许可以将一个事件处理程序,并调用类似window.location.hash = this.id虽然我不知道的mootools如何处理事件。

(你也需要所有ID是唯一的)



Answer 3:

您可以使用下面的代码,以避免滚动:

<a href="javascript:void(0);">linktxt</a>


Answer 4:

我找到了解决办法。 在这里,我从打电话的href保存旧的位置和滚动后恢复

<script language="JavaScript" type="text/javascript">
<!--
function keepLocation(oldOffset) {
  if (window.pageYOffset!= null){
    st=oldOffset;
  }
  if (document.body.scrollWidth!= null){
    st=oldOffset;
  }
  setTimeout('window.scrollTo(0,st)',10);
}
//-->
</script>

在网页的身体

<a href="#tab1" onclick="keepLocation(window.pageYOffset);" >Item</a> 

由于sitepoint



Answer 5:

此外, preventDefault

    $(your-selector).click(function (event) {
        event.preventDefault();
        //rest of your code here
    }


Answer 6:

一个简单的方法很可能是将其添加为一个GET。 也就是说, http://example.com/foo.php?q=#button1而不是http://example.com/foo.php#button1

这不会对如何页面显示任何影响(除非你想让它),大多数脚本语言已经有工具的地方,很容易(和安全)读取数据。



Answer 7:

好了,我们在这里的7年后这个答案已经出版,我发现了一个不同的方式,使其工作:只要点window.location.hash到一个不存在的锚! 它不为工作<a>秒,但在完美的作品<div>秒。

<div onclick="window.location.hash = '#NonExistentAnchor';">button 1</div>

在Chrome 56,Firefox的52和边缘(IE?)38.工作得很好换个好点的是,这不会产生任何控制台错误或警告。

希望它可以帮助别人,除了我。



文章来源: HTML anchor link with no scroll or jump