2009-09-08 17 views
5

मैं JQuery का उपयोग करने के एक टाइमर, यानी का उपयोग कर < ली > वस्तुओं के एक नंबर के माध्यम से पुनरावृति करने के लिए कोशिश कर रहा हूँ के साथ तत्वों के माध्यम से दोहराने में JQuery का उपयोग करना - हर 5 सेकंड के लिए, मैं अगले < ली > वस्तु का उपयोग करना चाहते हैं मेरे < उल > का।एक टाइमर

मुझे पता है कि आप .each फ़ंक्शन का उपयोग करके पुन: प्रयास कर सकते हैं, लेकिन मुझे इसके साथ टाइमर को एकीकृत करने में परेशानी हो रही है ताकि प्रत्येक व्यक्ति को अलग-अलग किया जा सके।

मैंने निम्नलिखित की कोशिश की, लेकिन यह सही ढंग से काम नहीं कर रहा था। यह मुझे अंतिम LI तत्व दे रहा था। मुझे लगता है कि ऐसा इसलिए है क्योंकि सेटटाइम अनुक्रमिक नहीं है।

$("#div_image_thumb ul li").each(function(){  
    var myLIobj = $(this); 
    setTimeout(function(){doThis(myLIobj);}, 5000); 
}); 

उत्तर

12

जॉन फिशर्स दृष्टिकोण अच्छा दिखता है। लेकिन अगर आप jQuery के प्रत्येक के साथ रहना है, जो काफी सुंदर है चाहता हूँ, कोशिश यह (5s, 10s आदि के लिए समय समाप्ति सेट करने के लिए JasonWoof के संकेत के आधार पर):

$("#div_image_thumb ul li").each(function (i) { 
    var $li = $(this); 
    setTimeout(function() { doThis($li); }, 5000 * (i + 1)); 
}); 
+0

बहुत बढ़िया! पूरी तरह से काम किया। इस बारे में कोई विचार है कि मैं इसे कैसे संशोधित कर सकता हूं ताकि यह एलआई के माध्यम से केवल 1 बार के विपरीत पुनरावृत्त हो सके? – Bamerza

+0

समस्या यह थी कि "एक ही समय में" सभी कार्यों को कॉल करते समय एक दौड़ की स्थिति थी और $ li गड़बड़ हो गई थी?बीटीडब्लू, आप $ ली का उपयोग क्यों कर रहे हैं न सिर्फ ली? – elcuco

+0

@elcuco, मुझे संदेह है कि फ़ैबियन $ li का उपयोग कर रहा है, इसलिए यह स्पष्ट है कि परिवर्तनीय एक jQuery ऑब्जेक्ट रखता है, जावास्क्रिप्ट परवाह नहीं है अगर यह ली या $ li है। –

7

कुछ इस तरह ठीक से काम करना चाहिए:

var elements = $("#div_image_thumb ul li"); 
var index = 0; 

var doNext = null; 
doNext = function() { 
    var element = elements.eq(index); 
    // do work 
    if (index < elements.length) { 
    index++; 
    setTimeout(doNext, 5000); 
    } 
} 
+1

जबकि मेरा उत्तर अधिक सुरुचिपूर्ण तरीका हो सकता है, मैं इसे अधिक मजबूत होने के लिए वोट देता हूं। एक प्रश्न: आप 'डूनेक्स्ट' को 'शून्य' के साथ क्यों शुरू करते हैं? क्या ऐसा इसलिए है क्योंकि आपको इसे अपने भीतर से संदर्भित करने की आवश्यकता है? फिर 'var doNext = function doNext() {...}' पर्याप्त होना चाहिए, है ना? 'SetTimeout' में 'doNext' के बजाय – Fabian

+0

या' arguments.callee', तो उसे नाम देने की भी आवश्यकता नहीं है और आप इसे लपेट सकते हैं और इसे तुरंत कॉल कर सकते हैं। – gnarf

+0

हां, मैंने फ़ंक्शन परिभाषा से पहले doNext बनाया है, इसलिए यह स्वयं को संदर्भित कर सकता है। –

0

मैं अपने कोड के साथ समस्या यह लगता है कि आप एक ही समय में समाप्त करने के लिए कई टाइमर सेट कर रहे हैं है (अब से 5 सेकंड)

तो आप या तो अब से 5 सेकंड के लिए एक टाइमर सेट करने,, और कहा कि ट्रिगर अगले 5 सेकंड टाइमर है की जरूरत है, या आप अलग अलग समय, जैसे 5s, 10s, 15s के लिए सेट के लिए टाइमर का एक समूह निर्धारित करने की आवश्यकता , 20s, आदि

3

स्वीकार किए जाते हैं जवाब देने के लिए अपनी टिप्पणी के आधार पर - आप तत्वों की संग्रह के माध्यम से पाशन जारी रखने के लिए इस आप एक setInterval और कुछ मदद करने के कार्यों

$(function() { 
    var $lis = $("#div_image_thumb ul li"); 
    var index = 0; 

    // setup a function to show the current one and increase the index 
    var doNext = function() { 
    // assuming doThis is defined somewhere else. 
    doThis($lis.eq(index)); 
    // increment the index - if it is beyond the number of li's - reset it to 0 
    if (++index >= $lis.length) index = 0; 
    }; 

    // call it once as we load 
    doNext(); 
    // set it up to be called every 5000 ms 
    setInterval(doNext, 5000); 
}); 
0

मैं इस एक सच में मददगार आइटम पाया उपयोग कर सकते हैं के लिए चाहते हैं। जबकि मुझे पता है कि यह पुराना है, मैंने पाया कि यह कार्य एक ऐसे फ़ंक्शन का निर्माण करने में सहायक है जिसे मैं वस्तुओं के विभिन्न सेटों के लिए उपयोग कर सकता हूं। मेरे पास एक पृष्ठ पर कुछ दीर्घाएं हैं और मैं बोर्ड में इसका उपयोग करने में सक्षम होना चाहता हूं। मुझे यकीन नहीं है कि क्या यह गर्नफ के उत्कृष्ट उत्तर के बगल में अनावश्यक है। शायद मैं जावास्क्रिप्ट पर चूसना। मैंने एक पैरामीटर की आवश्यकता है और प्रति पैरामीटर प्रति प्री ECCMA2015 मानकों के लिए डिफ़ॉल्ट सेट करने का निर्णय लिया है, इसलिए इसे पुराने संस्करणों के लिए काम करना चाहिए।

इसकी उपयोगिता यह है कि मैं इसे अपने जेएस इनिट के दौरान शुरू कर सकता हूं और उस पृष्ठ के आधार पर इसे कुछ भी खिला सकता हूं, जिससे मैं आसानी से विभिन्न वस्तुओं के माध्यम से चक्र चला सकता हूं।

 function gallery($lis) { 
    $lis = typeof a !== 'undefined' ? $lis : $("#div_image_thumb ul li"); 
    var index = 0; 

    // setup a function to show the current one and increase the index 
    var doNext = function() { 
    // assuming doThis is defined somewhere else. 
    doThis($lis.eq(index)); 
    // increment the index - if it is beyond the number of li's - reset it to 0 
    if (++index >= $lis.length) index = 0; 
    }; 

    // call it once as we load 
    doNext(); 
    // set it up to be called every 5000 ms 
    setInterval(doNext, 5000); 
}; 
संबंधित मुद्दे