2012-03-26 104 views
1

我在与jQuery的stop()搞混,最后以无限循环结束。 这个想法是(只是出于实验)创建一个带有“step”条件的动画,它将检查元素的css属性是否达到了某个值,并且在这种情况下,将动画停止在其轨道中,清除队列并立即完成动画。用jQuery无限循环.stop()

我知道这可能听起来很愚蠢,因为它可能不是.stop()的意思,但我想你可能会给我一个这种意外行为的答案。

下面的代码:

$("#element").animate({ 
    "width": "500px", 
    "height": "130px" 
}, { 
    "duration": 850, 
    "step": function() { 
     var currentWidth = $(this).width(); 
     if(currentWidth >= 295) $(this).stop(true, true); 
    } 
}).slideUp(700); 

我发现了无限循环由第二true传递给stop()造成的 - 也就是说,它告诉动画的参数立即完成。

它可能与'step'功能有关,但任何人都可以解释我这种行为吗?

回答

1

它可能做这样的事情:

  1. 运行动画帧
  2. 运行阶跃函数
  3. 步骤状况的真实
  4. 停止动画,但完成它立即
  5. 运行最后动画帧完成动画
  6. 运行步骤功能(循环回步骤2)
  7. 集动画帧完整(从未达到)
  8. 集动画作为完整的(从未达到)

如果你可以检查步骤是在最后的动画帧出现,你可以考虑到这一点时,调用stop()。

2

呼叫:

$(this).stop(true, true); 

将执行step功能的最后一步。在那次通话中,你再次呼叫停止。直到step函数完成,动画才从队列中移除。由于动画仍然在队列中,因此再次调用stop执行最后的step ...。

+0

谢谢你,我不完全了解,虽然你的答案,让我们看看,如果我得到主穴:当我打电话.stop(真,真)动画运行一次多为最后的时间和执行“步骤“...在”步骤“中.stop被再次调用并导致动画再次运行,最后一次......等等,并创建一个无限循环......是否正确?另外,你能否提供一些代码,说明如何正确实现我想要的?非常感谢你。 – user1236489 2012-03-29 13:02:22