2010-10-26 19 views
7

ठीक है, वास्तव में सरल सवाल है। मैं जावास्क्रिप्ट में एक क्रैश कोर्स ले रहा हूँ।जावास्क्रिप्ट में टाइमर को साफ़ या समय समाप्त करने के बारे में कैसे पता चलेगा?

अगर मैं timer = setTimeout(..., 500) का प्रयोग कर एक टाइमर सेट करने, और फिर clearTimeout(timer) टाइमर स्पष्ट करने के लिए, टाइमर का पूर्णांक मान नहीं बदलता है, तो मेरे सवाल है, तो एक टाइमर का समय समाप्त हो या साफ़ हो जाता है पता है कि कैसे है?

मैं if (timer) {...} का उपयोग करना चाहता हूं, लेकिन स्पष्ट रूप से एक सकारात्मक पूर्णांक हमेशा सत्य देता है।

उत्तर

12

के बाद

var timer = setTimeout(function() { 
    alert('you will never see this alert'); 
}, 500); 
clearTimeout(timer); 
+0

अगर मैं jQuery या अन्य जेएस ढांचे में से एक ऐसा कुछ था तो मुझे आश्चर्य नहीं होगा। किसी भी jQuery विशेषज्ञों को पता है कि यह मौजूद है या नहीं? – MatrixFrog

+0

यह वास्तव में व्यापक है। धन्यवाद! – lai

0

यदि आप टाइमआउट साफ़ करते हैं तो कॉलबैक निष्पादित नहीं किया जाएगा। इसलिए यदि कॉलबैक निष्पादित किया गया है तो इसका मतलब है कि आपने टाइमआउट सेट करने के बाद से 500ms पास कर दिए हैं।

उदाहरण के लिए: clearTimeout(timer)

4

असाइन null टाइमर के लिए आप कुछ और अधिक औपचारिक, आप जावास्क्रिप्ट वर्ग कि setTimeout/clearTimeout कार्यक्षमता समाहित बना सकते हैं की तलाश में हैं।

इस तरह के एक वर्ग कुछ इस तरह दिख सकता है:

/** class Timer **/ 
var Timer = function(delayMs, callbackFunc) { 
    this.delayMs = delayMs; 
    this.callbackFunc = callbackFunc; 
    this.timerState = 'new'; 
} 
Timer.prototype.start = function() { 
    if(this.tmr) return; 

    var self = this; 
    this.timerState = 'running'; 
    this.tmr = setTimeout(function() { self._handleTmr(); }, this.delayMs); 
} 
Timer.prototype.cancel = function() { 
    if(! this.tmr) return; 

    clearTimeout(this.tmr); 
    this.tmr = null; 
    this.timerState = 'canceled'; 
} 
Timer.prototype._handleTmr = function() { 
    this.tmr = null; 
    this.timerState = 'completed'; 
    this.callbackFunc(); 
} 

मैं भी एक timerState विशेषता है कि आप आसानी से निर्धारित टाइमर गया था "पूरा" या "रद्द" दिया जाएगा शामिल किया है।

आप इस तरह यह प्रयोग करेंगे:

var t = new Timer(500, function() { 
    alert('timer completed'); 
}); 
t.start(); 

// do whatever... 

// now cancel the timer if it hasn't completed yet. 
t.cancel(); 

// maybe you do some other stuff... 
// then check the timerState, and act accordingly. 
// 
if(t.timerState == 'canceled') { 
    alert("the timer was canceled!"); 
} else { 
    alert("the timer completed uneventfully."); 
} 

आप एक ही मूल विचार का विस्तार कर सकते अतिरिक्त कार्यक्षमता शामिल करने के लिए यदि आप इसे की जरूरत है (उदाहरण के लिए टाइमर दोहरा, प्रारंभ/बंद/फिर से शुरू, आदि।)

+0

यही वह है जो मैं अब उपयोग कर रहा हूं। यह जावास्क्रिप्ट में एक विचारधारा की तरह लगता है। इसे संभालने के लिए कोई बेहतर तरीका? – lai

+0

मुझे पता नहीं है, क्षमा करें: एस मुझे लगता है कि Win32 में हैंडल वही व्यवहार करते हैं :) –

0

यहां कुछ ऐसा है जो मैं टाइमर घटनाओं के लिए उपयोग करता हूं! उम्मीद है की यह मदद करेगा।

var toggleTimeOut = (function() { 

    var _timeout; 

    return function (clear_timeout) { 

     if(!clear_timeout) 
     { 
     _timeout = setTimeout(function() {/*DO YOUR STUFF*/}, 5000); 
     } 
     else 
     { 
     if(typeof _timeout != typeof undefined && _timeout != 0) 
     { 
      clearTimeout(_timeout); 
      _timeout= 0; 
     } 
     } 
    } 
    })();