我試圖理解當我把多個調用放在jQuery上時,它意味着什麼,因爲我沒有得到我期望的類似情況下的結果。jQuery函數隊列混淆
例1:
$(this).animate({opacity: 0.25}, 250).animate({opacity: 1.0}, 250);
正如預期的那樣,這給了半透明的快閃返回到完全不透明瞭。
例2:
$(this).animate({opacity: 0.25}, 250).removeAttr("style");
在這種情況下,而不是逐漸恢復到不透明,我預計removeAttr(「風格」),以使其跳回不透明度動畫完成後。這是因爲動畫不透明度函數僅僅更改了opacity
的值並設置了display:block
,我期望通過刪除這些樣式,一切都恢復正常。
相反,它看起來像removeAttr在動畫完成前觸發,清除樣式,然後動畫設置更多的不透明度,使項目保持半透明。
事實上,這是事件發生的順序似乎的事實,改變removeAttr使用完成回調確認工作正常:
$(this).animate({opacity: 0.25}, 250, function(){$(this).removeAttr("style");});
爲什麼是它的動畫似乎要處理串行,而至少有一些功能與動畫並行處理?
+1,但大多數其他函數(如removeAttr())甚至不使用隊列,而是立即應用它們的效果。 – 2011-04-20 00:29:06
@ Box9:我只是想編輯我的答案:),在與jsFiddle玩了一段時間之後:http://jsfiddle.net/QVXEC/ – 2011-04-20 00:31:24
通過在調用'animate'時將'queue'更改爲'false' ,它應該立即執行而不等待'fx'隊列上的其他功能。它的確如此,但它並不完全同步執行,因爲人們會相信,因爲'removeAttr'也會立即觸發。 – 2011-04-20 00:32:49