Der Timer wird angezeigt, als ob es eine Art Stopp nach Pause ist. Wenn ich aber auf "Weiter" klicke, finde ich heraus, dass der Counter weiterhin hinter der Szene läuft. Ich denke, es gibt Probleme mit setInterval. Bitte hilf mir. Mein Projekt auf CodePen als Referenz, wenn Sie brauchen.Der Timer stoppt nicht, nachdem die Pause-Taste angeklickt wurde
Meine Timer-Funktion
function timer(seconds) {
clearInterval(countdown);
const now = Date.now();
const then = now + seconds * 1000;
displayTimerLeft(seconds);
console.log({
now,
then
});
countdown = setInterval(() => {
if (!isPaused) {
const remainSeconds = Math.round((then - Date.now())/1000);
if (remainSeconds < 0) {
clearInterval(countdown);
return;
}
displayTimerLeft(remainSeconds);
}
}, 1000);
}
Pause und starten Sie Click-Ereignisse
pause.addEventListener('click', function() {
isPaused = true;
return;
})
start.addEventListener('click', function() {
isPaused = false;
})
Ein paar Hinweise. Erstens, benutze 'then' nicht als const. 'then' ist ein Schlüsselwort in js, das in 'if then' Anweisungen verwendet wird. Wenn js Probleme mit einem Element verursacht, überspringt es oft den Rest der Funktion. Wenn Sie also Ihren Variablennamen ändern, kann dies möglicherweise behoben werden. Sie sollten aber auch 'variable = undefined' verwenden, wenn Sie clearInterval (Variable) verwenden, sonst wird es nicht vollständig gelöscht. – EvSunWoodard
Mögliches Duplikat von [Javascript - Pausieren setInterval()] (http://stackoverflow.com/questions/21277900/javascript-pausing-setinterval) – bobjoe
@bobjoe Es ist kein Duplikat tatsächlich, das Problem kommt von ihm nicht mit einer Variablen um Sekunden zu zählen, aber den Endzeitstempel unverändert zu lassen, auch wenn er pausiert. Sein Code-Snippet ist fast genau so wie die Antwort in dem Post, den Sie verlinkt haben. –