页面变化时是否有jQuery事件?

4

我是Jquery的初学者,正在努力适应它。有没有可以绑定到页面上的事件来停止我的幻灯片计时器?

我想做的是,当用户更改页面或转到另一个标签页时,我想捕获该事件。是否有任何事件或侦听器可以实现这个目的?

3个回答

2
我建议使用onbeforeunload代替unload,以便为您提供最大的时间。但是,如果您计划在此时向服务器发出请求(或执行任何异步操作),则可能会发生竞争条件,有时请求可以通过,有时则不行。
这是因为页面在卸载时停止处理您的请求(或其他异步操作)。在现代浏览器中,这几乎立即发生,在旧版IE中则相对较快。因此,在任何unloadbeforeunload事件中做某些事情很少有意义。
如果您想将计时器信息传递给下一个URL,则可以在单击它们时修改URL。
$('a').click(function(){ this.href=this.href + "#timer=" + timerVar; });

当您进入下一页时,您可以从URL中读取上一个值。

谷歌分析通过给所有链接添加延迟来解决此问题:

$('a').click(function(){
  var that = this;
  setTimeout(function(){
    window.location=that.href;
  },100); 
  return false;
});

这只是为您的页面提供了额外的时间来跟随链接。虽然它并不是万无一失的,但对于谷歌来说并不重要,因为分析数据有些瞬时性(而且他们还将url参数用于其他更重要的事情(例如活动))。


谢谢你的回答,Alex。但我想你误解了我的意思。我用jQuery制作了一个简单的滑块,并且它有一个计时器。我想要做的是,如果用户切换到另一个选项卡、另一个网站或者切换到其他浏览器,停止计时器。我想要捕捉这个事件,就像许多面向对象编程语言可以通过“focus in”或“focus out”来控制这些事件一样。但是根据我阅读的jQuery文档,他们使用focus来针对元素而不是整个页面本身。也许我错了。就像我说的,我是一个jQuery的初学者。 - zbgokalp
我的回答解决了如何停止计时器,并将信息发送到您网站上的下一页。然后,当新页面加载时,您可以继续处理该事件。 - Alex Sexton
1
据我理解(如有错误请指正),这段代码将当前时间发送到“我的”另一个页面。但是我想要做的是在用户“聚焦于”其他内容时捕获事件。可以是其他网站、其他浏览器、本地文件等任何东西,只要用户“离开”我的页面即可。同时非常感谢您提供答案并尝试帮助。 - zbgokalp
哦,那有点困难。我明白你的意思。我认为许多旧浏览器支持window.onfocus,在较新的浏览器中,您可能可以通过使用requestAnimationFrame来解决问题,它只在窗口聚焦时触发。不过这是一个相当大的hack。由你决定。 - Alex Sexton

1

谢谢Sam,但它并没有像它所说的那样触发。我的意思是我尝试更改页面,使用前进和后退按钮。但即使是你给出的链接上的示例也没有触发。我需要添加更多的代码吗? - zbgokalp
1
如果您无法看到这些事件,那是因为它们被触发后,控制台会清除以显示新页面。大多数控制台(如Firebug和Webkit)都有一个选项,在页面卸载后不清除旧日志。您需要使用这些设置。 - Alex Sexton
1
现代的 Webkit 浏览器,如 Chrome 和 Safari 不支持该卸载方法。 - Exception
我只想在用户切换选项卡或检查文件夹等操作时停止计时器,以使用更少的内存和CPU。在大多数面向对象编程中,您都有失去焦点方法,但找不到适用于jQuery的有效方法。 - zbgokalp

0

我也尝试了这种方法...实际上对我来说更有意义。JavaScript比jQuery更容易,但仍然没有触发。 - zbgokalp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接