दिलचस्प पोस्ट
स्ट्रिंग में शून्य-पैड अंक जावास्क्रिप्ट कॉलबैक फ़ंक्शंस में वैरिएबल हमेशा लूप में अंतिम मान प्राप्त करता है? स्ट्रींगबिल्डर / स्ट्रिंगबफर बनाम "+" ऑपरेटर एंड्रॉइड सूचीदृश्य को रीफ्रेश करने के लिए कैसे? IPython नोटबुक स्थान त्रुटि सी में बाउंड से बाहर सर्रे इंडेक्स प्रक्रियात्मक प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग के बीच अंतर क्या है? सेकंड में 2 तिथियों के बीच का अंतर एंड्रॉइड व्यू में उठने वाले अक्सर मुद्दे, XML को पार्स करने में त्रुटि: अनबाउंड उपसर्ग mysql विदेशी कुंजी बाधा गलत तरीके से गठित त्रुटि है एएसपी.एन.टी.नेट सत्र राज्य सेवा का उपयोग करते हुए सभी अनुप्रयोगों में सत्र साझा करना Microdata मेटा टैग के साथ एक घटना में एक छवि कैसे जोड़ें? Ruby 1.9.3 के साथ रूबी-डीबग? एंड्रॉइड: रैखिक लेआउट के लिए एक पाठ दृश्यता प्रोग्राम जोड़ें जावास्क्रिप्ट स्ट्रिंग / पूर्णांक तुलना

jQuery $ .animate () कई तत्व लेकिन केवल एक बार कॉलबैक फ़ायर करें

यदि आप jQuery के साथ चेतन करने के लिए एक वर्ग या तत्वों का संग्रह चुनते हैं:

$('.myElems').animate({....}); 

और फिर भी कॉलबैक फ़ंक्शन का उपयोग करें, आप बहुत सारे अनावश्यक animate() कॉल के साथ समाप्त होते हैं

 var i=1; $('.myElems').animate({width:'200px'}, 200, function(){ //do something else $('#someOtherElem').animate({opacity:'1'}, 300, function(){ if (i>1) console.log('the '+i+'-th waste of resources just finished wasting your resources'); i++; }); }); 

बेशक यह सिर्फ खराब कोड और / या डिज़ाइन है – लेकिन ऐसा कुछ है जो मैं कर सकता हूं कि दोनों बहुत से animate() कॉल को कॉलबैक का उपयोग करते हुए केवल एक कॉल से बचाते हैं, और मेरे कोड / कोड के साथ निष्कासन और पंगा लेना अनिवार्य कॉलबैक का भार रखते हैं I अपेक्षित व्यवहार?

आदर्श रूप से मैं सिर्फ एक 'डिस्पोजेबल' कॉलबैक को कोडित करने में सक्षम होता हूं जो केवल एक बार चलाएगा – अन्यथा शायद परीक्षण करने के लिए एक प्रभावी तरीका है अगर कुछ पहले से ही jQuery द्वारा एनिमेटेड हो रहा है?

उदाहरण: http://jsfiddle.net/uzSE6/ (चेतावनी – यह चेतावनी बक्से का लोड दिखाएगा)

वेब के समाधान से एकत्रित समाधान "jQuery $ .animate () कई तत्व लेकिन केवल एक बार कॉलबैक फ़ायर करें"

आप when इस्तेमाल कर सकते हैं:

 $.when($('.myElems').animate({width: 200}, 200)).then(function () { console.log('foo'); }); 

http://jsfiddle.net/tyqZq/

वैकल्पिक संस्करण:

 $('.myElems').animate({width: 200}, 200).promise().done(function () { console.log('foo'); }); 

आप दूसरे + कॉलबैक को ब्लॉक करने के लिए एक चर बना सकते हैं …

 var i=1; $('.myElems').animate({width:'200px'}, 200, function(){ //do something else $('#someOtherElem').animate({opacity:'1'}, 300, function(){ if (i>1) return; else { console.log('the '+i+'-th waste of resources just finished wasting your resources'); i++; } }); }); 

यह केवल एक बार आग जाएगा क्योंकि प्रत्येक बाद के कॉलबैक को रद्द कर दिया जाएगा 🙂