मैं सेटइंटरवल टाइमर को कैसे रीसेट करूं?


83

मैं setIntervalटाइमर को 0 पर कैसे रीसेट करूं ?

var myTimer = setInterval(function() {
  console.log('idle');
}, 4000);

मैंने कोशिश की clearInterval(myTimer)लेकिन वह पूरी तरह से अंतराल को रोक देता है। मैं चाहता हूं कि यह 0 से फिर से शुरू हो।

जवाबों:


174

यदि "पुनरारंभ" द्वारा, आप इस समय एक नया 4 सेकंड का अंतराल शुरू करना चाहते हैं, तो आपको टाइमर को रोकना और पुनः आरंभ करना होगा।

function myFn() {console.log('idle');}

var myTimer = setInterval(myFn, 4000);

// Then, later at some future time, 
// to restart a new 4 second interval starting at this exact moment in time
clearInterval(myTimer);
myTimer = setInterval(myFn, 4000);

तुम भी एक रीसेट सुविधा प्रदान करता है कि एक छोटे टाइमर वस्तु का उपयोग कर सकते हैं:

function Timer(fn, t) {
    var timerObj = setInterval(fn, t);

    this.stop = function() {
        if (timerObj) {
            clearInterval(timerObj);
            timerObj = null;
        }
        return this;
    }

    // start timer using current settings (if it's not already running)
    this.start = function() {
        if (!timerObj) {
            this.stop();
            timerObj = setInterval(fn, t);
        }
        return this;
    }

    // start with new or original interval, stop current interval
    this.reset = function(newT = t) {
        t = newT;
        return this.stop().start();
    }
}

उपयोग:

var timer = new Timer(function() {
    // your function here
}, 5000);


// switch interval to 10 seconds
timer.reset(10000);

// stop the timer
timer.stop();

// start the timer
timer.start();

वर्किंग डेमो: https://jsfiddle.net/jfriend00/t17vz506/


सुंदर वस्तु। मुझे हमेशा अच्छा लगता है जब मैं किसी को OAP का उपयोग जावास्क्रिप्ट में देखता हूं! धन्यवाद!
फोर्ट

12

एक बार जब आप एक बार फिर से clearIntervalआप का उपयोग कर अंतराल को साफ कर सकते हैं setInterval। और कॉलबैक को दोहराने से बचने के लिए इसे एक अलग फ़ंक्शन के रूप में बाह्य करें:

var ticker = function() {
    console.log('idle');
};

फिर:

var myTimer = window.setInterval(ticker, 4000);

फिर जब आप पुनः आरंभ करने का निर्णय लेते हैं:

window.clearInterval(myTimer);
myTimer = window.setInterval(ticker, 4000);

पर कैसे? clearInterval (myTimer) और फिर setInterval (myTimer, 4000) काम नहीं करता है :(
रिक डे वोस

@RikdeVos, यह काम क्यों नहीं करता है? इसके अलावा यह नहीं है setInterval(myTimer, 4000), यह होना चाहिए setInterval(ticker, 4000);
डारिन दिमित्रोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.