3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊
var elems = $(parentSelect).nextAll(), count = elems.length;
elems.each( function(i) {
$(this).fadeOut(200, function() {
$(this).remove();
if (!--count) doMyThing();
});
});
請注意,.each()它本身是同步的 -調(diào)用.each()之后的語句僅在.each()調(diào)用完成后才執(zhí)行。但是,在迭代中開始的異步操作.each()當(dāng)然會以自己的方式繼續(xù)。這就是這里的問題:淡化元素的調(diào)用是由計時器驅(qū)動的動畫,并且這些動畫以自己的速度繼續(xù)進(jìn)行。
因此,上面的解決方案可以跟蹤淡出了多少個元素。每次調(diào)用.fadeOut()都會獲取完成回調(diào)。當(dāng)回調(diào)函數(shù)注意到所有涉及的原始元素都已計入回調(diào)時,可以放心地采取所有后續(xù)操作,以確保所有衰落都已完成。
這是一個有四年歷史的答案(目前為2014年)。一種現(xiàn)代的方法可能涉及使用Deferred / Promise機(jī)制,盡管以上內(nèi)容很簡單,并且應(yīng)該可以正常工作。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個贊
可能要晚了,但我認(rèn)為這段代碼行得通...
$blocks.each(function(i, elm) {
$(elm).fadeOut(200, function() {
$(elm).remove();
});
}).promise().done( function(){ alert("All was done"); } );

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個贊
JavaScript是同步運(yùn)行的,因此您放置的任何內(nèi)容each()都不會運(yùn)行,直到each()完成。
考慮以下測試:
var count = 0;
var array = [];
// populate an array with 1,000,000 entries
for(var i = 0; i < 1000000; i++) {
array.push(i);
}
// use each to iterate over the array, incrementing count each time
$.each(array, function() {
count++
});
// the alert won't get called until the 'each' is done
// as evidenced by the value of count
alert(count);
調(diào)用警報時,計數(shù)將等于1000000,因?yàn)橹钡絜ach()完成警報才會運(yùn)行。
- 3 回答
- 0 關(guān)注
- 939 瀏覽
添加回答
舉報