2009-06-30 123 views
94

我確信我前幾天看過這篇文章,但似乎無法在任何地方找到它。
我有一個​​事件後,我刪除了元素,但jQuery刪除元素之前,它有機會完成淡出。
如何讓jQuery等到元素淡出,然後刪除它?如何讓jQuery等待效果完成?

回答

146

您可以指定一個回調函數:

$(selector).fadeOut('slow', function() { 
    // will be called when the element finishes fading out 
    // if selector matches multiple elements it will be called once for each 
}); 

Documentation here

+0

賓果。我以爲是這樣,但我需要做的是將我的整個功能放在那裏,而不僅僅是刪除部分。附:如果任何人對我閱讀過的書感興趣,現在又發現了學習JQuery - 更好的交互和設計。再次感謝 – uriDium 2009-06-30 20:23:09

+0

如果有人有舊的jQuery,那麼這個「動畫完成回調」錯誤是一個令人討厭的錯誤:http://bugs.jquery.com/ticket/5684 – JustAMartin 2014-05-23 16:03:33

+1

這裏得到你的upvote數字100 – kaiser 2015-09-19 23:28:35

6

如果您希望切換某個東西,在同一個地方淡出另一個淡出另一個東西,您可以在div上放置{position:absolute}屬性,這樣兩個動畫都會相互重疊,而您在開始下一個動畫之前,不必等待一個動畫結束。

157

使用jQuery 1.6版本,您可以使用.promise()方法。

$(selector).fadeOut('slow'); 
$(selector).promise().done(function(){ 
    // will be called when all the animations on the queue finish 
}); 
9

您可以如用$.when()等到promise完成:

var myEvent = function() { 
    $(selector).fadeOut('fast'); 
}; 
$.when(myEvent()).done(function() { 
    console.log('Task finished.'); 
}); 

如果你這樣做,可能還有失敗的請求,那麼你甚至可以更進一步:

$.when(myEvent()) 
    .done(function(d) { 
     console.log(d, 'Task done.'); 
    }) 
    .fail(function(err) { 
     console.log(err, 'Task failed.'); 
    }) 
    // Runs always 
    .then(function(data, textStatus, jqXHR) { 
     console.log(jqXHR.status, textStatus, 'Status 200/"OK"?'); 
    });