Estoy haciendo un temporizador y, por alguna razón, el temporizador no está disminuyendo correctamente usando la función de countDown en el código a continuación. Estoy usando setTimeout para llamarlo countDown repetidamente, pero cuando revisé el JavaScript del depurador ni siquiera va a esa línea, después de la penúltima línea timeEl.textContent = tempMinutes + ":" + tempSeconds; simplemente se detiene. setInterval pero es lo mismo. Quiero saber cómo bajar el temporizador y configurar el tiempo de setTimeout para que haga lo suyo, pero ¿cómo? Cualquier consejo o ayuda es muy apreciada!
const workBtnEl = document.querySelector("#work-btn"); const shortBreakBtnEl = document.querySelector("#short-break-btn"); const longBreakBtnEl = document.querySelector("#long-break-btn"); let timeEl = document.querySelector("#time"); const work = 25; const shortBreak = 5; const longBreak = 15; let currentMinutes, currentSeconds = 0; workBtnEl.addEventListener("click", function() { timeEl.textContent = "25:00"; currentMinutes = work; countDown(currentMinutes, 0); }); function countDown(minutes, seconds) { if (seconds == 0) { if (minutes == 0) { return; } minutes -= 1; seconds = 59; } let tempSeconds = seconds; let tempMinutes = minutes; if (seconds < 10) { tempSeconds = "0" + seconds; } if (minutes < 10) { tempMinutes = "0" + minutes } timeEl.textContent = tempMinutes + ":" + tempSeconds; let time = setTimeout(countDown, 1000, minutes, seconds); } <button id="work-btn"> Work </button> <button id="short-break-btn"> Short break </button> <button id="long-break-btn"> Long break </button> <span id="time">Time</span>Nunca disminuyes los seconds cuando no es cero.
Así que agrega eso después del bloque if :
if (seconds == 0) { // your code... } else seconds--; // <---Debe reducir la variable de segundos en la función de countDown de lo contrario, se imprimirá el mismo texto en su área de texto cada vez.
En este momento, solo tiene una condición si los segundos son 0, luego configure los segundos en 59.
Mira lo que has hecho en esta línea:
let currentMinutes, currentSeconds = 0;Los minutos actuales no estarán definidos en su mayoría, usé Node REPL para verificar si tiene algo como:
let a, b = 0El valor de a no estaba definido y b se estableció en cero. Una asignación apropiada sería
let currentMinutes = 0; let currentSeconds = 0;