当窗口没有聚焦时,如何强制Jquery动画发生

时间:2011-07-14 07:25:24

标签: javascript jquery ajax animation fadein

好, 所以我正在建立一个基于ajax的游戏。无论如何它是多人游戏,连接到服务器。它轮询服务器,始终获取更新。无论如何,游戏具有不同的游戏状态,并且必须根据游戏状态为GUI设置动画。

然而,问题是;当窗口未聚焦时,jquery动画会排队并且不会渲染。这意味着用户走了5分钟然后回来,一大堆过时的动画开始逐一运行。

所以我想知道是否有办法强制jquery动画在被调用时运行而不是等待焦点窗口?

有关发生这种情况的详细信息,请参阅此处jquery文档中的附加说明http://api.jquery.com/fadeIn/

干杯,乔希

2 个答案:

答案 0 :(得分:2)

根据动画的不同,您可以通过调用.queue()在获取动画队列的body元素上添加onfocus事件,如果它长于一个元素,则可以调用.clearQueue()。当然,你必须小心不要弄乱布局,因为它会删除所有的动画。

如果列表长于一个元素,您也可以尝试jQuery.fx.off = true。这应该将所有动画的持续时间设置为0,这将导致所有排队的动画立即完成,并再次启用动画,将值设置为false。但是,由于我自己没有尝试过,我不确定它是否只在尚未运行的动画(已在队列中)或仅在尚未添加到动画的动画中设置持续时间一个队列。如果后一种情况属实,您可以遍历队列并手动将每个持续时间设置为0。

答案 1 :(得分:1)

与Zanfa的答案类似 - 您可以使用焦点事件,但您也可以将它与模糊事件结合使用。

因此,您可以使用模糊事件干净地暂停游戏,停止任何动画,然后再使用焦点重新开始游戏,而不是尝试清除焦点上的所有内容。