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