2012-02-16 21 views
7

jQuery के लिए, निम्नलिखित दो स्निपेट के परिणाम में क्या अंतर है। कुछ भी? क्या मैं सही हूं कि श्रृंखला में कॉलबैक और दूसरा आइटम पहले एनीमेशन के पूरा होने पर निष्पादित किया गया है?Jquery चेनिंग बनाम कॉलबैक

$(selector).animate({ opacity: 1 }).animate({ opacity: 0.5 }); 

बनाम

$(selector).animate({ opacity: 1}, function() 
{ 
    $(this).animate({ opacity: 0.5 }); 
}); 

स्थिति मैं एक दूसरे के ऊपर का उपयोग करना चाहते हैं की किस प्रकार (ओं) में? क्या मैं केवल बाद वाले का उपयोग करूंगा यदि मुझे कुछ और परिष्कृत करने की आवश्यकता होती है या किसी भिन्न चयनकर्ता पर स्विच किया जाता है?

अग्रिम धन्यवाद।

+0

बस एक त्वरित मूल्यांकन के रूप में, मुझे लगता है कि पहला व्यक्ति अधिक कुशल होगा क्योंकि आपको एक jQuery ऑब्जेक्ट के रूप में $ (यह) डालना नहीं है और फिर उस पर एनिमेट करें। यदि आपको अधिक जटिल सामग्री करना है तो आप शायद दूसरे विकल्प का उपयोग करना चाहते हैं। संपादित करें: मुझे लगता है कि आप दक्षता की तलाश नहीं कर रहे हैं, मुझे लगता है कि दोनों एक ही काम करते हैं, हालांकि पहले मामले में, दूसरी कॉल चलाने से पहले एनिमेट को वापस जाना होगा। – kand

+0

jQuery उन्हें कतारबद्ध करके एनिमेशन प्रबंधित करता है ताकि दूसरा एनीमेशन तब तक निष्पादित नहीं किया जाएगा जब तक कि पहले व्यक्ति समाप्त नहीं हो जाता। यह केवल एनिमेशन पर लागू होता है। Http://api.jquery.com/queue/ – Stefan

+0

@Stefan समझ में उदाहरण देखें। क्या आप यहां सूचीबद्ध किसी भी चीज़ पर लागू होंगे? [jQuery प्रभाव] (http://api.jquery.com/category/effects/) – technoTarek

उत्तर

9

वे प्रभावी रूप से समान हैं, इसलिए आप शायद पहले का उपयोग करेंगे।

कॉलबैक (दूसरा संस्करण) किसी भी मनमानी कोड को चलाने के लिए है जो स्वचालित रूप से कतारबद्ध नहीं होता है।

इसमें अन्य jQuery विधियों जैसे .css() शामिल हैं, उदाहरण के लिए, यदि कॉलबैक में नहीं है, तो एनीमेशन पूर्ण होने से बहुत पहले भाग जाएगा।

// .animate() is automatically queued 
$(selector).animate({ opacity: 1 }).animate({ opacity: 0.5 }); 

// .css() is not automatically queued, so you'd need a callback 
$(selector).animate({ opacity: 1 }, function() { 
    $(this).css({ opacity: 0.5 }); 
}); 

कॉलबैक के बिना ...

// Animation starts ----v 
$(selector).animate({ opacity: 1 }).css({ opacity: 0.5 }); 
// ...but .css() runs immediately-------------^ 
// ...because it isn't automatically added to the queue. 
+1

अच्छा स्पष्टीकरण, बस jQuery स्रोत को देख रहा था और आप सही महोदय हैं! – Loktar

0

फर्क सिर्फ इतना समय है: जब तक पहले चेतन पूरा करता है दूसरे उदाहरण में कॉलबैक निष्पादित नहीं किया जाएगा । पहली एनीमेशन शुरू होने के तुरंत बाद पहले उदाहरण में जंजीर एनिमेट होगा।

+0

http://jsfiddle.net/loktar/MJmgP/ ऐसा प्रतीत नहीं होता है:? – Loktar

+0

@ रोरी मैंने शुरुआत में सोचा कि समय भी भिन्न है, लेकिन फिर मैंने इसे jQuery.com पर पढ़ा: प्रत्येक तत्व में jQuery से जुड़े कार्यों के कई कतारों में से एक हो सकता है। अधिकांश अनुप्रयोगों में, केवल एक कतार (जिसे एफएक्स कहा जाता है) का उपयोग किया जाता है। कतार प्रोग्राम निष्पादन को रोक दिए बिना, तत्वों को अतुल्यकालिक रूप से क्रियाओं के अनुक्रम की अनुमति देते हैं ... उदाहरण के लिए: '$ ('# foo')। SlideUp()।fadeIn(); ' जब यह कथन निष्पादित किया जाता है, तो तत्व तुरंत अपनी स्लाइडिंग एनीमेशन शुरू करता है, लेकिन फ्लाईंग संक्रमण Fx कतार पर रखा जाता है जिसे स्लाइडिंग संक्रमण पूरा होने के बाद ही बुलाया जाता है। – technoTarek

+0

@technoTarek यह बहुत दिलचस्प है, क्या आपके पास आलसी लोगों (जैसे खुद) के लिए एक लिंक है? – jbabey

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