2009-06-30 17 views
94

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

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

उत्तर

146

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

+0

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

+0

अगर किसी के पास पुराना jQuery है, तो यह "एनीमेशन पूर्ण कॉलबैक" बग एक बुरा था: http://bugs.jquery.com/ticket/5684 – JustAMartin

+1

यहां आपका अपवॉट नंबर 100 – kaiser

6

अगर आप इसे स्विच करना चाहते हैं, एक को लुप्त करना और एक ही स्थान पर एक दूसरे को लुप्त करना चाहते हैं, तो आप divs पर एक {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 
}); 
+2

है यह अधिकांश jQuery एनिमेशन के लिए अनावश्यक है क्योंकि अधिकांश विधियों पर कॉलबैक तर्क हैं, लेकिन 'वादा() 'या' कब() 'और' किया गया) 'का उपयोग करके आप तीसरे पक्ष के तरीकों से या यहां तक ​​कि अपने स्वयं के कुछ अच्छे व्यवहार का लाभ उठा सकते हैं। 'प्रमोशन()' के अर्थ के लिए +1! – stuartc

+2

ग्रेट सॉल्यूशन! –

+4

पहले यह नहीं सुना है, बस मेरे बट को बचाया। – prismspecs

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

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

संबंधित मुद्दे