У меня есть две функции, отображающие минуты и секунды. Внутри функций я использую IIFE с setTimeout для вычисления времени. Получив это, я с трудом выясняю, как я могу приостановить отображение, если нажата кнопка паузы.Javascript - Приостановка вывода IIFE с функцией setTimeout и отображения мин/сек - Часы Pomodoro
Таймер работает нормально и отображается правильно.
Я понимаю, что это, вероятно, не очень хороший способ сделать это, но я потратил так много времени (пытаясь узнать, как использовать IIFE), что я не хочу сдаваться. Если мне нужно, я поцарапаю его.
Обновление - этот таймер будет получать информацию от пользователя. Это может быть 25 минут. Я хочу, чтобы он начал отсчет оттуда, пока не достигнет 0, и пользователь сможет приостановить его в любое время.
let convertToSeconds = document.getElementById('timeValue').value * 60;
let seconds = 60;
function secondsCounter(time) {
// let flag = document.getElementById('pauseButton').value;
for (let i = seconds; i > 0; i--) {
(function(x) {
setTimeout(function() {
let remaining = seconds - x;
document.getElementById('displaySeconds').innerHTML = remaining;
console.log(remaining);
}, i * 1000);
})(i);
}
}
function counter() {
for (let i = convertToSeconds; i > 0; i--) {
(function(minutes) {
setTimeout(function() {
let remaining = Math.floor((convertToSeconds - minutes)/60);
document.getElementById('displayMinutes').innerHTML = remaining;
console.log(remaining);
}, i * 1000);
setTimeout(function() {
secondsCounter(seconds);
}, i * 60000);
})(i);
}
secondsCounter(seconds);
}
Я пробовал пару вещей.
Использование флага и если заявление вокруг
document.getElementById('displaySeconds').innerHTML = remaining;
так, если моя кнопка паузы нажата, изменения флага, а другой SetTimeout (10 минут) срабатывают. Не останавливает обратный отсчет DOM, он продолжает двигаться. Я просто хотел увидеть какую-то реакцию, но ничего не произошло. Что-то вроде:function secondsCounter(time) { let flag = document.getElementById('pauseButton').value; for (let i = seconds; i > 0; i--) { (function(x) { setTimeout(function() { let remaining = seconds - x; if (flag === 'yes') { document.getElementById('displaySeconds').innerHTML = remaining; console.log(remaining); } else { setTimeout(function() { console.log(remaining); }, 10000); } }, i * 1000); })(i); } }
Использование setInterval и clearInterval, что ничего не делать.
Возможно ли это? Не знаете, где еще искать. Спасибо
Я обновил мой вопрос немного, разве что изменить свой ответ? Я смотрю, как я могу применить этот ответ. –
@WayneBunch Нет, мой ответ - это то, что вам нужно. Вы не можете останавливать/приостанавливать 'setTimeout' или' clearTimeout', не указывая на таймер, сохраняя его, а затем вызывая 'clearTimeout (таймер)' или 'clearInterval (timer)'. –
@WayneBunch Смотрите мой обновленный ответ на часы, отсчитывающие от введенного пользователем значения. –