代码之家  ›  专栏  ›  技术社区  ›  uriDium

如何让jquery等待效果完成?

  •  102
  • uriDium  · 技术社区  · 15 年前

    我确信我前几天读过这篇文章,但我似乎在任何地方都找不到。
    我有一个 fadeOut() 事件之后,我移除了元素,但jquery在元素有机会淡出之前移除了元素。
    如何让jquery等待元素消失, 然后 移除它?

    4 回复  |  直到 6 年前
        1
  •  157
  •   Paolo Bergantino    15 年前

    可以指定回调函数:

    $(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
  •  168
  •   Reinaldo Junior    13 年前

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

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

    你也可以用 $.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"?' );
        } );
    
        4
  •  6
  •   Samin    15 年前

    如果您希望切换,淡出一个,淡出另一个,在同一个地方,您可以放置一个位置:绝对属性在div上,所以两个动画都在一个上面播放,并且您不必等待一个动画结束,然后启动下一个动画。