jQuery函数排队混乱

时间:2011-04-20 00:18:33

标签: jquery

我试图理解当我在jQuery上连续多次调用时它意味着什么,因为我没有得到我在类似情况下所期望的结果。

示例1:

$(this).animate({opacity: 0.25}, 250).animate({opacity: 1.0}, 250);

正如预期的那样,这会在返回完全不透明度之前快速闪现半透明效果。

示例2:

$(this).animate({opacity: 0.25}, 250).removeAttr("style");

在这种情况下,我不希望逐渐返回到不透明度,我希望removeAttr(“style”)能够在动画完成后跳回到不透明度。这是因为动画不透明度函数仅更改opacity的值并设置display:block,我希望通过删除这些样式,一切都恢复正常。

相反,似乎removeAttr在动画完成之前触发,清除样式,然后动画再设置不透明度,使项目保持半透明。

这是事件序列的事实似乎可以通过改变removeAttr以使用完成回调的事实来确认:

$(this).animate({opacity: 0.25}, 250, function(){$(this).removeAttr("style");});

为什么动画似乎是连续处理的,而至少有些功能是与动画并行处理的?

2 个答案:

答案 0 :(得分:3)

这里有两个不同的队列。

当您致电animate时,会将其推送到名为fx的效果队列中。大多数其他东西不使用队列。这就是为什么这两个电话似乎同时发生的原因。

答案 1 :(得分:2)

您可以将animate视为异步。

如果想要在动画结束后发生某些事情,那么你应该使用回调函数。