#javascript
Вопрос:
Обратный отсчет при нажатии кнопки для будильника не останавливается должным образом. Он останавливается на «-1:0» , а не на 0:00, как планировалось. Попытался решить проблему, изменив «gt; gt; Может быть, кто-нибудь сможет мне в этом помочь.
function startTimer() { let startTime = new Date().getTime(); let fiveMinutes = 5 * 1 * 1000; let endTime = startTime fiveMinutes; var countdown = setInterval(function count() { let timeLeft = endTime - new Date().getTime(); let minutes = timeLeft / (1000 * 60); minutes = Math.floor(minutes); let seconds = (timeLeft / 1000) % 60; seconds = Math.round(seconds); let text = minutes ':' seconds; timer.innerHTML = text; if ((minutes lt;= 0) amp;amp; (seconds lt;= 0)) { clearInterval(countdown); } }, 1000); }
lt;div class="timer center margin-top" id="timer"gt; 00:05 lt;/divgt; lt;div class="button center"gt; lt;img onclick="startTimer()" img src="img/btn.png" /gt; lt;/divgt;
Комментарии:
1. Если вы используете фрагмент кода, пожалуйста, также используйте функцию «Аккуратный» (и удалите ненужные пробелы, такие как пустые строки).
2. Я взял на себя смелость сократить обратный отсчет до пяти секунд. На самом деле нет необходимости ждать целую минуту, если для вопроса важна только последняя секунда.
3. Спасибо @Andreas. Мои первые шаги здесь^^
Ответ №1:
Ваша проблема только в использовании Math.floor(minutes)
. попробуйте использовать Math.round(minutes)
это код для решения вашей проблемы :
function startTimer() { let startTime = new Date().getTime(); let fiveMinutes = 5 * 1 * 1000; let endTime = startTime fiveMinutes; var countdown = setInterval(function () { let timeLeft = endTime - new Date().getTime(); let minutes = timeLeft / (1000 * 60); minutes = Math.round(minutes); let seconds = (timeLeft / 1000) % 60; seconds = Math.round(seconds); let text = minutes ':' seconds; timer.innerHTML = text; if ((minutes lt;= 0) amp;amp; (seconds lt;= 0)) { clearInterval(countdown); } }, 1000); }
lt;div class="timer center margin-top" id="timer"gt; 00:05 lt;/divgt; lt;div class="button center"gt; lt;img onclick="startTimer()" img src="img/btn.png" alt="button start" /gt; lt;/divgt;
Ответ №2:
function startTimer() { let startTime = new Date().getTime(); // If its five minute 5 * 60 * 1000; let fiveSeconds = 5 * 1000; let endTime = startTime fiveSeconds; var countdown = setInterval(function count() { let timeLeft = endTime - new Date().getTime(); let minutes = Math.floor((timeLeft / (1000 * 60)) % 60); let seconds = Math.floor((timeLeft / 1000) % 60); // Once test is passed do the DOM manipulation let text = minutes ':' seconds; timer.innerHTML = text; if ((minutes lt;= 0) amp;amp; (seconds === 0)) { return clearInterval(countdown); } }, 1000); }
lt;div class="timer center margin-top" id="timer"gt; 5:00 lt;/divgt; lt;div class="button center"gt; lt;button onclick="startTimer()"gt;Startlt;/buttongt; lt;/divgt;
Комментарии:
1. В чем проблема с кодом операции? Что вы изменили, чтобы это сработало?
2. И почему вы изменили обратный отсчет на 5 минут? Почему будущие читатели должны так долго ждать, пока не увидят, действительно ли этот ответ является ответом?
3. Изменен код для заполнения данных после проверки значения. Также переменная говорит пять минут, что не означает 5 секунд. Если кто-то хочет протестировать, он может попробовать это в своей консоли браузера.
4. Спасибо за помощь. Счетчик останавливается на 0:1. Это должно прекратиться в 0:00.
5. @Codenix-1349 внес некоторые изменения. Можете ли вы взглянуть на это сейчас?