【问题标题】:Event for reclicking local anchor重新点击本地锚点的事件
【发布时间】:2016-09-18 14:48:40
【问题描述】:

可以通过window.onhashchange() 检测到单击指向本地锚点的链接如果它涉及对 URL 哈希的更改。

但是,我注意到至少在 Chrome 中(我没有用其他浏览器检查过这一点),如果您随后滚动页面并再次选择指向同一本地锚点的链接,则该链接的任何 onclick 处理程序都会触发,然后页面跳转到锚点,但显然onhashchange() 不会触发,window.onload() 也不会触发。这很重要的原因是这两个都会在移动到锚点之后触发,而链接onclick 处理程序会在之前触发。

那么:是否有与onload() 相关的用于跳转到 URL 哈希中已指示的本地锚点?

【问题讨论】:

  • hashchange 事件显然不会在哈希没有改变时触发,并且您点击了相同的链接?
  • @adeneo 是的——尽管我想如果它是指向同一个锚点的不同链接也会适用。该页面未重新加载,因此没有 onload() 事件。 URL 没有改变,所以没有事件发生。但它会移动页面,我需要一个处理程序来处理 发生移动之后。
  • 没有处理程序,但除非您使用某种平滑滚动插件,否则它会立即发生,click 处理程序应该这样做。
  • 问题是点击处理程序发生在移动之前。我正在使用onhashchange()compensate for a top bar。这发生在 移动到锚点之后,因此向下滚动一点很简单。但是,通过onclick 向下滚动然后将页面移动到锚点是没有意义的。
  • 我想唯一的选择是自己进行滚动,然后当它完成滚动时你现在就可以,或者在滚动完成时使用超时和猜测。

标签: javascript dom-events


【解决方案1】:

这没有任何事件,但由于页面没有重新加载,因此可以在 onclick 处理程序中使用超时,以便链接等到页面移动后,例如,

link.onclick = function () {
    setTimeout (
        function () {
            // Do whatever after the jump.
        }, 100
    )
}

十分之一秒不是很明显,可能有足够的时间进行转换。如果您使用 1/4 或 1/2 秒,则间隙应该很明显,如果“做任何事情”是用户会注意到发生的事情,这可能会或可能不会作为快速线索。

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2021-10-02
    • 1970-01-01
    • 2012-06-28
    • 2016-06-02
    相关资源
    最近更新 更多