2011-10-07 16 views
18

से पहले अपने पेलोड को आग लगाने के लिए फोर्स सेटटाइमआउट मैंने प्रत्येक स्लाइड के लिए स्लाइड्स और परिसंपत्तियों का एक छोटा सा प्रस्तुति सॉफ्टवेयर विकसित किया है। जब एक स्लाइड प्रदान की जाती है तो इसकी सभी संपत्ति setTimeout विधि का उपयोग कर देरी के बाद लूप हो जाती है। मीठा लग रहा है ...मूल सेट

याय !, आवश्यकताओं को बदल दिया गया है, प्रस्तुति अब पावरपॉइंट स्लाइड शो की तरह कार्य करने की आवश्यकता है, माउस क्लिक इवेंट अगली संपत्ति को तुरंत पृष्ठ पर प्रस्तुत किया जाएगा।

मेरा प्रश्न है; क्या मेरा टाइमआउट तुरंत आग लगने का कोई तरीका है? मैं टाइमआउट के ढेर में मिल सकता हूं और स्टोर कर सकता हूं क्योंकि टाइमआउट बनने पर इसे वापस कर दिया जाता है। एकमात्र अन्य विकल्प टाइमआउट को रद्द करना होगा और फिर तत्व को फिर से बनाना होगा, जो कि बहुत अधिक प्रसंस्करण है, फिर मैं करना चाहता हूं, और मुझे लगता है कि मैं अपने कोड को बहुत अधिक प्रतिक्रिया नहीं दे रहा हूं।

कोई विचार?

उत्तर

14

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

19

आप इस तरह टाइमर सेट हैं: ऐसा करने से तुरंत

var timer1 = window.setTimeout(mainFunction,500) 

यह कॉल:

window.clearTimeout(timer1) 
mainFunction() 

कुंजी टाइमर से समारोह अलग करना है।

+1

पू, मैं लगा रहा, यह करने के लिए होता है मैं त्वरित सुधार के लिए उम्मीद की गई थी। चूंकि 'मुख्य समारोह' में गणना की जाती है जब टाइमआउट पहली बार सेट होता है, तो मुझे ऑनलिक ईवेंट पर लाने के लिए कुछ रिफैक्टरिंग करने की आवश्यकता होगी ... धन्यवाद – lgados

+0

अधिक जानकारी प्रबंधित करने से बचने वाले एक क्लोजर रैपिंग के लिए नीचे मेरा उत्तर देखें । टाइमआउट को एक ऑब्जेक्ट के साथ .cancel() और a .trigger() विधि के साथ बदलता है। – Killroy

16

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

function createTimeout(timeoutHandler, delay) { 
    var timeoutId; 
    timeoutId = setTimeout(timeoutHandler, delay); 
    return { 
     clear: function() { 
      clearTimeout(timeoutId); 
     }, 
     trigger: function() { 
      clearTimeout(timeoutId); 
      return timeoutHandler(); 
     } 
    }; 
} 

var a = new Date(); 

var timeout = createTimeout(function() { console.log(a); }, 1000); 
// timeout.clear(); 
timeout.trigger(); 
+1

सुरुचिपूर्ण समाधान – JobaDiniz

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