एक प्रभाव समाप्त होने तक प्रतीक्षा करने के लिए jQuery कैसे प्राप्त करें?


107

मुझे यकीन है कि मैं इस दिन के बारे में पढ़ता हूं, लेकिन मुझे यह कहीं भी नहीं मिल रहा है।
मेरे पास एक fadeOut()घटना है जिसके बाद मैं तत्व को हटा देता हूं, लेकिन jQuery तत्व को हटा रहा है इससे पहले कि यह लुप्त होती खत्म करने का मौका है।
जब तक तत्व फीका न हो जाए, तब तक प्रतीक्षा करने के लिए मुझे jQuery कैसे मिलता है, तो इसे हटा दें?

जवाबों:


167

आप कॉलबैक फ़ंक्शन निर्दिष्ट कर सकते हैं:

$(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
});

यहाँ प्रलेखन


बिंगो। मैंने सोचा था कि यह था, लेकिन मुझे जो करने की ज़रूरत थी, उसने अपना पूरा कार्य वहाँ से हटा दिया। पुनश्च यदि कोई भी इस पुस्तक में रुचि रखता है, जिसे मैंने इसे पढ़ा है और अब फिर से पाया है, तो लर्निंग JQuery है - बेहतर इंटरैक्शन और डिज़ाइन। धन्यवाद फिर से
uriDium

यदि किसी के पास पुराना jQuery है, तो यह "एनीमेशन किया गया कॉलबैक" बग एक बुरा था: Bugs.jquery.com/ticket/5684
जस्टअमार्टिन

178

JQuery 1.6 संस्करण के साथ आप .promise()विधि का उपयोग कर सकते हैं ।

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

4
वहाँ के रूप में सबसे अधिक तरीकों पर कॉलबैक आर्ग हैं, लेकिन का उपयोग कर यह सबसे jQuery एनिमेशन के लिए अनावश्यक है promise()या when()और done()अपनी खुद की आप 3 पार्टी तरीकों से कुछ बहुत ही शांत व्यवहार का लाभ उठा सकें, या यहाँ तक। अर्थ के लिए +1 .promise()!
स्टुअर्टेक

4
इससे पहले यह नहीं सुना, बस मेरे बट को बचाया।
प्रिज्मपेकस

1
मेरे मामले में, मैं एक तत्व के वर्तमान एनीमेशन का उपयोग करने की कोशिश कर रहा था जो मेरे कोड में कहीं और हो रहा था, और इस प्रकार मुझे कॉलबैक तक पहुंच नहीं थी। +1
क्रिस्टियन

11
वादे का उपयोग करते हुए () भी आपको सब कुछ होने पर एकल कॉलबैक स्थापित करने की अनुमति देता है। यदि आप 10 चीजों के सेट पर fadeOut () कहते हैं, तो प्रत्येक चीज के लिए एक कॉलबैक होगा जिसमें 'यह' सेट उपयुक्त दायरे में होगा। यदि आप केवल एक बार फायर करना चाहते हैं, तो यह फ़ंक्शन वास्तव में मददगार है। इसके अलावा: यदि आप एक ऐसे चयनकर्ता पर चेतन करते हैं जो शून्य तत्वों से मेल खाता है, तो सामान्य कॉलबैक कभी भी आग नहीं लगाएगा। वादा () अंत में कोई बात नहीं क्या आग जाएगा।
zslayton

6
आप इसे इस तरह से भी चेन कर सकते हैं:$(selector).fadeOut('slow').promise().done(function(){...});
साइक्लोन

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"?' );
    } );

2
इस जवाब का यह हिस्सा $.when()काम नहीं करता है क्योंकि myEvent()एक वादा वापस नहीं करता है और $.when()आपसे अपेक्षा करता है कि आप इसे अपना काम करने के लिए एक या एक से अधिक वादों को पारित करेंगे।
२२

6

अगर इसकी कोई चीज जिसे आप स्विच करना चाहते हैं, एक को बाहर करना और दूसरी को एक ही स्थान पर लुप्त करना, आप एक {स्थिति: निरपेक्ष} विशेषता को divs पर रख सकते हैं, इसलिए दोनों एनिमेशन एक दूसरे के ऊपर खेलते हैं, और आपके पास नहीं है अगले शुरू होने से पहले एक एनीमेशन खत्म होने की प्रतीक्षा करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.