es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VueJS – Creación de un contador que cuente el tiempo con las opciones de inicio, pausa, reanudar y detener.

Tengo un problema con la función de reanudación de contador.

Por ejemplo:
Si el temporizador se detiene en 00:00:03 y luego, unos segundos después (por ejemplo: 5 segundos después) hago clic en el botón de reanudar.
Debería continuar desde 00:00:04.
Pero el temporizador comienza desde 00:00:08.

No tengo idea de cómo solucionar esto.

Aquí están los códigos: https://jsitor.com/pVz84uaY3

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en la información y fragmento de código proporcionado, parece que el problema está en la forma en que se está utilizando la función setInterval para actualizar el temporizador.

    Una solución posible sería almacenar el tiempo transcurrido (en milisegundos) cuando se pausa el temporizador y usarlo como punto de partida cuando se reanuda el temporizador. A continuación se muestra una implementación de ejemplo:

    let startTime = null; // variable para almacenar el tiempo de inicio
    let elapsedTime = 0; // variable para almacenar el tiempo transcurrido cuando se pausa el temporizador
    
    function startTimer() {
      if (!startTime) {
        // si es la primera vez que se inicia el temporizador, se establece el tiempo de inicio
        startTime = new Date().getTime();
      }
    
      setInterval(() => {
        const currentTime = new Date().getTime();
        const deltaTime = currentTime - startTime + elapsedTime;
    
        // se actualiza la pantalla del temporizador en función del tiempo transcurrido calculado
        updateTimer(deltaTime);
      }, 10);
    }
    
    function pauseTimer() {
      clearInterval(setIntervalId);
    
      // se almacena el tiempo transcurrido cuando se pausa el temporizador
      const currentTime = new Date().getTime();
      elapsedTime = currentTime - startTime;
    
      setIntervalId = null;
    }
    
    function resumeTimer() {
      startTime = new Date().getTime() - elapsedTime;
      setIntervalId = setInterval(() => {
        const currentTime = new Date().getTime();
        const deltaTime = currentTime - startTime;
    
        // se actualiza la pantalla del temporizador en función del tiempo transcurrido calculado
        updateTimer(deltaTime);
      }, 10);
    }
    

    En esta implementación, la variable startTime se utiliza para hacer un seguimiento del tiempo de inicio del temporizador, mientras que la variable elapsedTime se utiliza para almacenar el tiempo transcurrido cuando se pausa el temporizador. Cuando se reanuda el temporizador, se ajusta el tiempo de inicio restando el tiempo transcurrido del tiempo actual. Esto garantiza que el temporizador continúe desde el punto correcto.

Comments are closed.