¿Cómo puedo restablecer un setInterval temporizador a 0?

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

Traté de clearInterval(myTimer) pero que se detiene por completo el intervalo. Quiero empezar de 0.

InformationsquelleAutor Rik de Vos | 2011-11-14

2 Comentarios

  1. 138

    Si por «reiniciar», que significa iniciar un nuevo de 4 segundos de intervalo, en este momento, entonces usted debe detener y reiniciar el temporizador.

    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);

    También se podría usar un poco de objeto timer que ofrece una característica de restablecimiento:

    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();
        }
    }

    Uso:

    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();

    Demo: https://jsfiddle.net/jfriend00/t17vz506/

    • Objeto bello. Siempre me siento bien cuando veo a alguien usando programación orientada a objetos en javascript! Gracias!
  2. 12

    Una vez claro el intervalo mediante clearInterval podría setInterval una vez más. Y para evitar la repetición de la devolución de llamada externalizar como una función separada:

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

    a continuación:

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

    entonces cuando decide reiniciar:

    window.clearInterval(myTimer);
    myTimer = window.setInterval(ticker, 4000);
    • pero, ¿cómo? clearInterval(myTimer) y, a continuación, setInterval(myTimer, 4000) no funciona 🙁
    • por qué no funciona? También no setInterval(myTimer, 4000), debe ser setInterval(ticker, 4000);.

Dejar respuesta

Please enter your comment!
Please enter your name here