【发布时间】: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