Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Pomodoro Timer se vuelve negativo y cuenta hacia adelante

Tengo un temporizador pomodoro que se supone que cuenta los "minutos de trabajo" que un usuario ha ingresado y luego los minutos de descanso y luego el ciclo. El temporizador comienza a contar los minutos de trabajo como debería y luego los minutos de descanso (como debería), luego se reinicia y vuelve a contar los minutos de trabajo como debería PERO cuando termina con eso y llega a los minutos de descanso por segunda vez en lugar de contar abajo de por ej. 1 minuto cuenta desde -1 minuto en adelante, entonces -1 minuto y un segundo y así sucesivamente. Soy un completo principiante en JavaScript, por lo que sería muy bueno si lo tuvieras en cuenta, cualquier ayuda la agradezco mucho. Aquí está el código JavaScript:

 // we need some variables to store the work and break minutes var workSeconds = "120", breakSeconds = "60"; // and a referens to interval var xInterval; var audio = new Audio('Bell_finished.mp3'); // start function function start() { xInterval = setInterval(workCountDown, 1000); } // stop function function stop() { clearInterval(xInterval); } // reset function; calls stop, save which re-stores the values of user inputs and then starts again. function reset() { stop(); save(); start(); } // save function that saves the values of user inputs function save() { workSeconds = parseInt(document.getElementById("TaskTime").value)*60; breakMinutes = parseInt(document.getElementById("BreakTime").value)*60; } // working count down function function workCountDown() { // counting down work seconds workSeconds--; // showing work seconds in "0:0" format: document.getElementById("timer").innerText = Math.floor((workSeconds / 60)).toString() + ":" + (workSeconds % 60).toString(); // if workSeconds reaches to zero, stops the workInterval and starts the breakInterval: if (workSeconds == 0) { audio.play(); console.log("relaxing..."); clearInterval(xInterval); xInterval = setInterval(breakCountDown, 1000); } } // breaking count down function function breakCountDown() { // counting down break seconds breakSeconds--; // showing break seconds in "0:0" format: document.getElementById("timer").innerText = Math.floor((breakSeconds / 60)).toString() + ":" + (breakSeconds % 60).toString(); // if breakSeconds reaches to zero, stops the breakInterval, resets the variables to initial values by calling save function and starts the workInterval again: if (breakSeconds == 0) { audio.play(); console.log("ready to work..."); reset(); } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

como dije en el comentario, funciona bien, simplemente cambie breakMinutes a breakSeconds dentro de la función de guardar. Aquí hay una implementación de su código. puede ejecutar el fragmento aquí y ver el resultado

 // we need some variables to store the work and break minutes let workSeconds = "120", breakSeconds = "60"; // and a referens to interval let xInterval; let isStarted = false; // start function function start() { xInterval = setInterval(workCountDown, 1000); } // stop function function stop() { clearInterval(xInterval); } // reset function; calls stop, save which re-stores the values of user inputs and then starts again. function reset() { stop(); save(); start(); } // save function that saves the values of user inputs function save() { workSeconds = parseInt(document.getElementById("TaskTime").value || 120, 10) * 60; breakSeconds = parseInt(document.getElementById("BreakTime").value || 60, 10) * 60; } // working count down function function workCountDown() { // counting down work seconds workSeconds--; // showing work seconds in "0:0" format: document.getElementById("timer").innerText = Math.floor(workSeconds / 60).toString() + ":" + (workSeconds % 60).toString(); // if workSeconds reaches to zero, stops the workInterval and starts the breakInterval: if (workSeconds === 0) { console.log("relaxing..."); clearInterval(xInterval); xInterval = setInterval(breakCountDown, 1000); } } // breaking count down function function breakCountDown() { // counting down break seconds breakSeconds--; // showing break seconds in "0:0" format: document.getElementById("timer").innerText = Math.floor(breakSeconds / 60).toString() + ":" + (breakSeconds % 60).toString(); // if breakSeconds reaches to zero, stops the breakInterval, resets the variables to initial values by calling save function and starts the workInterval again: if (breakSeconds === 0) { console.log("ready to work..."); reset(); } } const startButton = document.getElementById("start-btn"); startButton.addEventListener("click", (e) => { isStarted = !isStarted; if (isStarted) { save(); start(); startButton.textContent = "Stop"; } else { stop(); startButton.textContent = "Start"; document.getElementById("timer").innerText = 0; } });
 <label>Work Time: <input type="number" id="TaskTime" value="1" /></label> <label>Break Time: <input type="number" id="BreakTime" value="1" /></label> <div id="timer">0</div> <button id="start-btn">Start</button>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda