如何让jQuery等到效果完成?

时间:2009-06-30 20:15:37

标签: jquery

我确信我前几天读过这篇文章,但我似乎无法在任何地方找到它 我有一个fadeOut()事件,之后我删除了该元素,但jQuery在它有机会完成淡出之前删除该元素。
如何让jQuery等到元素淡出,然后删除它?

4 个答案:

答案 0 :(得分:171)

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

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

答案 1 :(得分:160)

您可以指定回调函数:

$(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

答案 2 :(得分: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"?' );
    } );

答案 3 :(得分:6)

如果你想要切换的东西,在同一个地方淡出一个并淡化另一个,你可以在div上放置一个{position:absolute}属性,这样两个动画就可以在彼此之上播放,而你不会在开始下一个动画之前,不得不等待一个动画结束。