Odpowiedzi:
Możesz określić funkcję zwrotną:
$(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
});
W wersji jQuery 1.6 możesz skorzystać z .promise()metody.
$(selector).fadeOut('slow');
$(selector).promise().done(function(){
// will be called when all the animations on the queue finish
});
promise()lub when()i done()można wykorzystać niektóre bardzo fajne zachowanie od 3 metod partyjnych, a nawet własne. +1 za intencje .promise()!
$(selector).fadeOut('slow').promise().done(function(){...});
Możesz równie dobrze $.when()poczekać, aż promiseskończysz:
var myEvent = function() {
$( selector ).fadeOut( 'fast' );
};
$.when( myEvent() ).done( function() {
console.log( 'Task finished.' );
} );
Jeśli wykonujesz żądanie, które równie dobrze może się nie powieść, możesz nawet pójść o krok dalej:
$.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"?' );
} );
$.when()nie działa, ponieważ myEvent()nie zwraca obietnicy i $.when()oczekuje, że przekażesz jej jedną lub więcej obietnic, aby wykonała swoją pracę.
jeśli jest to coś, co chcesz zmienić, wyciszając jedną i wygaszając drugą w tym samym miejscu, możesz umieścić atrybut {position: Absolut} na elementach div, aby obie animacje były odtwarzane jedna na drugiej i nie masz poczekać na zakończenie jednej animacji przed uruchomieniem następnej.