दिलचस्प पोस्ट
jQuery के मान्य – एक समूह में कम से कम एक फ़ील्ड को भरना होगा ऑर्डर () फ़ंक्शन को समझना IPhone वेब अनुप्रयोग में स्क्रॉल करना अक्षम करें? UICollectionViewCell पर लंबे समय से प्रेस इशारे यूनिक्स जैसी परिवेशों में उनके नाम के बाद के नंबर क्यों हैं? विभिन्न संकल्प समर्थन एंड्रॉइड होम बटन की तरह पॉवर बटन ओवरराइड करें विजुअल स्टूडियो 2012 वेब प्रकाशित फाइल कॉपी नहीं करता है गतिविधि और टुकड़ा गतिविधि के बीच का अंतर एक पूर्ण कार्य बनाएं <T> फ़ाइल पथ से जावा JTree निर्देशिका संरचना jQuery के कीप्रेस () घटना नहीं गोलीबारी? git – git-dir अपेक्षित के रूप में काम नहीं कर रहा है MATLAB में एक वैश्विक चर घोषित करना क्या अधिक कुशल है? पाउ के वर्ग का उपयोग करना या उसके साथ ही गुणा करना?

मैं jQuery के उपयोग से कई तत्वों को क्रमिक रूप से कैसे सजीव कर सकता हूं?

मैंने सोचा कि यह आसान होगा, लेकिन मैं अभी भी इसे काम करने के लिए नहीं मिल सकता है एक बटन पर क्लिक करके, मुझे कई एनिमेशन चाहिए – एक के बाद एक – लेकिन अब सभी एनिमेशन एक बार में हो रहे हैं यह मेरा कोड है – क्या कोई मुझे बता सकता है कि मैं गलत कहां हूं ?:

$(".button").click(function(){ $("#header").animate({top: "-50"}, "slow") $("#something").animate({height: "hide"}, "slow") $("ul#menu").animate({top: "20", left: "0"}, "slow") $(".trigger").animate({height: "show", top: "110", left: "0"}, "slow"); }); 

वेब के समाधान से एकत्रित समाधान "मैं jQuery के उपयोग से कई तत्वों को क्रमिक रूप से कैसे सजीव कर सकता हूं?"

आप कॉलबैक का एक समूह कर सकते हैं

 $(".button").click(function(){ $("#header").animate({top: "-50"}, "slow", function() { $("#something").animate({height: "hide"}, "slow", function() { $("ul#menu").animate({top: "20", left: "0"}, "slow", function() { $(".trigger").animate({height: "show", top: "110", left: "0"}, "slow"); }); }); }); }); 

कतार केवल तभी काम करता है यदि आपके समान तत्व को एनिमेट करना भगवान जानते हैं कि ऊपर क्यों मतदान हुआ लेकिन यह काम नहीं करेगा

आपको ऐनिमेशन कॉलबैक का उपयोग करने की आवश्यकता होगी आप एनीमेट फ़ंक्शन के अंतिम प्रिम के रूप में किसी फ़ंक्शन में पास कर सकते हैं और एनीमेशन पूरा होने के बाद इसे नाम दिया जाएगा। हालांकि अगर आपके कॉलबैक के साथ कई नेस्टेड एनिमेशन हैं तो स्क्रिप्ट बहुत अपठनीय हो जाएगी।

मैं निम्नलिखित प्लगइन का सुझाव देता हूं जो देशी jQuery चेतन फ़ंक्शन को फिर से लिखता है और आपको एक कतार नाम निर्दिष्ट करने की अनुमति देता है। सभी एनीमेशन जिन्हें आप एक ही कतार नाम से जोड़ते हैं, क्रमिक रूप से यहां दिखाए जाएंगे।

उदाहरण स्क्रिप्ट

  $("#1").animate({marginTop: "100px"}, {duration: 100, queue: "global"}); $("#2").animate({marginTop: "100px"}, {duration: 100, queue: "global"}); $("#3").animate({marginTop: "100px"}, {duration: 100, queue: "global"}); 

मुझे पता है यह एक पुराना सवाल है, लेकिन इसे नए jQuery के संस्करणों (1.5 और ऊपर) के लिए एक उत्तर के साथ अद्यतन किया जाना चाहिए:

$.when का उपयोग करते समय $.when फ़ंक्शन आप इस सहायक को लिख सकते हैं:

 function queue(start) { var rest = [].splice.call(arguments, 1), promise = $.Deferred(); if (start) { $.when(start()).then(function () { queue.apply(window, rest); }); } else { promise.resolve(); } return promise; } 

तो आप इसे इस तरह से कॉल कर सकते हैं:

 queue(function () { return $("#header").animate({top: "-50"}, "slow"); }, function () { return $("#something").animate({height: "hide"}, "slow"); }, function () { return $("ul#menu").animate({top: "20", left: "0"}, "slow"); }, function () { return $(".trigger").animate({height: "show", top: "110", left: "0"}, "slow"); }); 

@ स्कम्ंक के उत्तर पर एक मामूली सुधार अन्य असंबंधित एनिमेशन के साथ परस्पर विरोधी से बचने के लिए एक सादे ऑब्जेक्ट jQuery ऑब्जेक्ट की कतार का उपयोग करना है:

 $({}) .queue(function (next) { elm1.fadeOut('fast', next); }) .queue(function (next) { elm2.fadeIn('fast', next); }) // ... 

ध्यान रखना एक बात यह है कि, हालांकि मैंने कभी भी ऐसा करने में समस्याओं में नहीं दौड़ लिया है, एक सादे ऑब्जेक्ट आवरण पर कतार विधियों का उपयोग करते हुए दस्तावेज़ों के अनुसार आधिकारिक रूप से समर्थित नहीं है।

सादा ऑब्जेक्ट्स के साथ कार्य करना

वर्तमान में, jQuery में लपेटे गए सादे जावास्क्रिप्ट ऑब्जेक्ट्स पर आधारित केवल एक ही अभियान हैं: .डेटा (), prop ()। बाँध (),। अनबंड (), .trigger () और .triggerHandler ()

जैमस के जवाब पर विस्तार, यह एनिमेशन के लंबे अनुक्रमों के लिए संभवतः थोड़ा अधिक व्यावहारिक है। एक सूची भेजें, बारीकी से प्रत्येक को चेतन करें, फिर से एक कम सूची के साथ फिर से चेतन करें सभी समाप्त होने पर कॉलबैक निष्पादित करें

यहां की सूची चयनित तत्वों का है, लेकिन यह प्रति एनीमेशन के विभिन्न एनीमेशन पैरामीटर वाले अधिक जटिल ऑब्जेक्ट की सूची हो सकती है।

यहाँ एक बेला है

 $(document).ready(function () { animate([$('#one'), $('#two'), $('#three')], finished); }); function finished() { console.log('Finished'); } function animate(list, callback) { if (list.length === 0) { callback(); return; } $el = list.shift(); $el.animate({left: '+=200'}, 1000, function () { animate(list, callback); }); } 

क्रमशः एकाधिक टैग अनियमित करें

आप jQuery के अंतर्निहित एनीमेशन कतार का लाभ उठा सकते हैं, यदि आप वैश्विक कतार के लिए शरीर की तरह एक टैग का चयन करते हैं:

 // Convenience object to ease global animation queueing $.globalQueue = { queue: function(anim) { $('body') .queue(function(dequeue) { anim() .queue(function(innerDequeue) { dequeue(); innerDequeue(); }); }); return this; } }; // Animation that coordinates multiple tags $(".button").click(function() { $.globalQueue .queue(function() { return $("#header").animate({top: "-50"}, "slow"); }).queue(function() { return $("#something").animate({height: "hide"}, "slow"); }).queue(function() { return $("ul#menu").animate({top: "20", left: "0"}, "slow"); }).queue(function() { return $(".trigger").animate({height: "show", top: "110", left: "0"}, "slow"); }); }); 

http://jsfiddle.net/b9chris/wjpL31o0/

इसलिए, यह इसलिए है कि यह काम करता है, और यह क्या कर रहा है:

  1. $.globalQueue.queue() पर कॉल केवल आपके टैग के एनीमेशन पर कॉल $.globalQueue.queue() , लेकिन यह शरीर टैग पर कतारबद्ध है।

  2. जब jQuery आपके टैग एनीमेशन को शरीर की कतार में मारता है, तो आपके टैग की एनीमेशन शुरू होती है, आपके टैग के लिए कतार पर – लेकिन जिस तरह से jQuery एनीमेशन फ़्रेमवर्क काम करता है, कोई भी कस्टम ऐनिमेशन कॉलबैक एक टैग की एनीमेशन कतार (इस मामले में शरीर की स्थिति) को रोक देता है , जब तक कस्टम ऐनिमेशन पास-इन dequeue() फ़ंक्शन को कॉल नहीं करता। इसलिए, भले ही आपके एनिमेटेड टैग और शरीर की कतार अलग-अलग हो, शरीर की टैग की कतार अब अपने dequeue() को कॉल करने के लिए प्रतीक्षा कर रही है। http://api.jquery.com/queue/#queue-queueName-callback

  3. हम अपने कतार में अपने कतार को जारी रखने के लिए कॉल की कतार में अंतिम कतारबद्ध वस्तु बनाते हैं, जिससे कतारें एक साथ मिलती हैं।

  4. सुविधा के लिए globalQueue.queue विधि इस globalQueue.queue को आसान चेनिंग के लिए देता है।

setInterval

पूर्णता की खातिर, यहां बस setInterval करने के लिए एक विकल्प setInterval – यह है कि आप अलग-अलग एनिमेशन निर्देशांक बनाने की तलाश में नहीं हैं, जैसे कि समय के साथ ही उन्हें अजीब उगने के बिना आग लगें, जो आपके एनीमेशन में आगे बढ़ते हैं जिस तरह से नए ब्राउज़र CPU को बचाने के लिए एनीमेशन कतार और टाइमर स्थगित करेंगे

आप इस तरह से setInterval करने के लिए कॉल की जगह ले सकते हैं:

 setInterval(doAthing, 8000); 

इसके साथ:

 /** * Alternative to window.setInterval(), that plays nicely with modern animation and CPU suspends */ $.setInterval = function (fn, interval) { var body = $('body'); var queueInterval = function () { body .delay(interval) .queue(function(dequeue) { fn(); queueInterval(); dequeue(); // Required for the jQuery animation queue to work (tells it to continue animating) }); }; queueInterval(); }; $.setInterval(doAthing, 8000); 

http://jsfiddle.net/b9chris/h156wgg6/

और एनीमेशन के उन अजीब विस्फोटों से बचें, जब एक पृष्ठभूमि टैब में इसके एनिमेशन ब्राउज़र द्वारा फिर से सक्षम होते हैं।

आप एक ही कतार में अपने प्रभाव डाल सकते हैं, अर्थात शरीर तत्व की कतार।

 $('.images IMG').ready( function(){ $('BODY').queue( function(){ $('.images').fadeTo('normal',1,function(){$('BODY').dequeue()}); } ); } ); 

सुनिश्चित करें कि आप अंतिम प्रभाव कॉलबैक के भीतर dequeue () को कॉल करते हैं।

यह पहले से ही अच्छी तरह से उत्तर दिया गया है (मुझे लगता है कि जैमस का जवाब सबसे अच्छा है), लेकिन मैंने सोचा कि मैं अपने वेबसाइट पर यह कैसे करूँ, इसके आधार पर एक और विकल्प प्रदान करना चाहता हूं, delay() फ़ंक्शन का उपयोग करके …

  $(".button").click(function(){ $("#header").animate({top: "-50"}, 1000) $("#something").delay(1000).animate({height: "hide"}, 1000) $("ul#menu").delay(2000).animate({top: "20", left: "0"}, 1000) $(".trigger").delay(3000).animate({height: "show", top: "110", left: "0"}, "slow"); }); 

(अपनी वांछित एनीमेशन की गति के साथ 1000 को बदलें। यह विचार आपके देरी समारोह में देरी है और प्रत्येक तत्व के एनीमेशन में विलंब होता है, इसलिए यदि आपका एनिमेशन प्रत्येक 500 मिलीसेकेंड होता तो आपके देरी मान 500, 1000, 1500 होंगे)

संपादित करें: एफवाईआई jquery की 'धीमी' गति भी 600 एमएलसीकेण्ड है। इसलिए यदि आप अपने ऐनिमेशन में 'धीमी गति से' अभी भी उपयोग करना चाहते हैं, तो ये केवल बाद के प्रत्येक कॉल में विलंब समारोह में उपयोग करें – 600, 1200, 1800

queue विकल्प का प्रयोग करें:

 $(".button").click(function(){ $("#header").animate({top: "-50"}, { queue: true, duration: "slow" }) $("#something").animate({height: "hide"}, { queue: true, duration: "slow" }) $("ul#menu").animate({top: "20", left: "0"}, { queue: true, duration: "slow" }) $(".trigger").animate({height: "show", top: "110", left: "0"}, { queue: true, duration: "slow" }); });