jquery和动画的异步性如何?

时间:2010-12-28 14:21:17

标签: javascript jquery jquery-animate

我的脚本出现了一些无法预测的不幸事件,我开始认为它可能与我使用的动画有关。

我有一个元素附加了click()事件,触发动画。像

这样的东西
$(el).click(function() {
  $(this).animate({some properies}, 500);
});

让我们说一点点延伸

$(el).click(function() {
  $(this).stop(true, true);
  fancyFunction(this);
  $(this).animate({some properies}, 500);
});

我现在已经添加了对fancyFunction的调用,重要的是我在对象上停止正在进行的动画(例如,我点击双击)。另外对于记录fancyFunction()必须确保元素上没有运行动画。

我认为这可能是我遇到的问题。您是否可以放心,在调用下一行之前,stop()已完成,在这种情况下是fancyFunction(),或者fancyFunction会在stop()启动后立即触发,但不一定完成?如果它的行为与动画类别中的其他功能相似,我猜不会。

如果这可能是问题,你有什么解决方案?

2 个答案:

答案 0 :(得分:2)

.stop() 同步,没有超时等... 将在下一个语句之前完成。我认为你的问题最有可能出现在其他地方,因为你拥有的杀死该元素上的所有动画。

答案 1 :(得分:0)

Javascript是单线程的,所以在你的javascript执行时,没有办法执行另一段代码。即使动画仍在运行,此时代码正在执行,这意味着动画无法在代码运行时实际更改对象。但是,是的,你的停止调用将阻止动画运行,并且在fancyFunction运行时没有任何动画。

在继续之前你想做的事情。 fancyFunction是否使用定时器或任何可能延迟处理的东西?如果是这样,请考虑不使用计时器或延迟。我确信你可以做的事情不涉及计时器。