Comment réinitialiser un timer setInterval
à 0?
var myTimer = setInterval(function() { console.log('idle'); }, 4000);
J’ai essayé clearInterval(myTimer)
mais cela arrête complètement l’intervalle. Je veux qu’il redémarre à partir de 0.
Si par “restart”, vous entendez commencer un nouvel intervalle de 4 secondes à ce moment, vous devez alors arrêter et redémarrer le minuteur.
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);
Vous pouvez également utiliser un petit object timer qui offre une fonction de réinitialisation:
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 interval, stop current interval this.reset = function(newT) { t = newT; return this.stop().start(); } }
Usage:
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();
Démo de travail: https://jsfiddle.net/jfriend00/t17vz506/
Une fois que vous effacez l’intervalle en utilisant clearInterval
vous pouvez setInterval
à nouveau. Et pour éviter de répéter le rappel, externalisez-le comme une fonction distincte:
var ticker = function() { console.log('idle'); };
puis:
var myTimer = window.setInterval(ticker, 4000);
puis quand vous décidez de redémarrer:
window.clearInterval(myTimer); myTimer = window.setInterval(ticker, 4000);