如何判断页面是否已跳转到javascript中的锚点(#)?

Aar*_*ron 10 javascript jquery dom javascript-events

我有一些javascript可以出现在许多不同的页面上.有时这些页面是通过包含锚引用的URL访问的(例如#comment-100).在那些情况下,我希望javascript延迟执行,直到窗口跳转.现在我只是使用延迟,但这非常hackish,显然在所有情况下都不起作用.我似乎无法找到任何与窗口"跳转"相对应的DOM事件.

除了简单的延迟之外,我提出的唯一解决方案是让JS在URL中寻找锚点,如果找到了,请注意scrollTop中的更改.但这似乎有些错误,而且我不能100%确定我的脚本在滚动发生之前总会被触发,因此只有在用户手动滚动页面时它才会运行.无论如何,我真的不喜欢这个解决方案而且更喜欢更多事件驱动的东西.有什么建议?

编辑澄清:

我不是想检测哈希变化.请看以下示例:

  1. Page index.php包含post.php#comment-1的链接
  2. 用户单击post.php#comment-1的链接
  3. post.php#comment-1加载
  4. $(文件).ready fires
  5. 不久之后,浏览器向下滚动到#comment-1

我正在尝试可靠地检测第5步发生的时间.

Gil*_*ham 1

看来你可以使用window.onscroll. 我刚才测试了这段代码:

<a name="end" />
<script type="text/javascript">
    window.onscroll = function (e) {
        alert("scrolled");
}
</script>
Run Code Online (Sandbox Code Playgroud)

这似乎有效。

编辑:嗯,它在 IE8 中不起作用。不过它在 Firefox 和 Chrome 中都可以工作。

编辑:jQuery 有一个.scroll()处理程序,但它在 IE 上滚动之前触发,并且似乎不适用于 Chrome 或 Firefox。

  • @Gilsham - 如果窗口因其他原因滚动怎么办? (2认同)