How do I reset the setInterval timer?
If by "restart", you mean to start a new 4 second interval at this moment, then you must stop and restart the timer.
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 timeclearInterval(myTimer);myTimer = setInterval(myFn, 4000);
You could also use a little timer object that offers a reset feature:
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(); }}
Usage:
var timer = new Timer(function() { // your function here}, 5000);// switch interval to 10 secondstimer.reset(10000);// stop the timertimer.stop();// start the timertimer.start();
Working demo: https://jsfiddle.net/jfriend00/t17vz506/
Once you clear the interval using clearInterval
you could setInterval
once again. And to avoid repeating the callback externalize it as a separate function:
var ticker = function() { console.log('idle');};
then:
var myTimer = window.setInterval(ticker, 4000);
then when you decide to restart:
window.clearInterval(myTimer);myTimer = window.setInterval(ticker, 4000);