Я бы сделал это с setInterval
, вы можете разрешить дробные часы, если вы используете parseFloat
вместо parseInt
.Вы также можете довольно легко отформатировать секунды, чтобы получить хорошее считывание.
Вы должны быть осторожны при очистке интервала, если кто-то нажимает кнопку более одного раза во время обратного отсчета, иначе вы получите несколько таймеров.Здесь, если вы нажмете дважды, он будет сброшен.
Некоторые улучшения включают проверку ввода, чтобы убедиться, что это число:
let int;
function DescreasNo() {
clearInterval(int) // clear interval to allow button to reset counter
var MyInput = document.getElementById('HoursOfWork').value;
let seconds = (parseFloat(MyInput) * 60 * 60)
var output = document.getElementById('output01');
int = setInterval(() => {
if (seconds <= 0) { // finished
clearInterval(int)
return
}
output.innerHTML = formatTime(seconds--)
}, 1000)
}
function formatTime(seconds) {
let hours = Math.floor(seconds / (60 * 60)).toString().padStart(2, '0')
let minutes = Math.floor((seconds - hours * 3600) / 60).toString().padStart(2, '0');
let second = Math.floor(seconds - (hours * 3600) - (minutes * 60)).toString().padStart(2, '0');
return `${hours}:${minutes}:${second}`;
}
<h1>Eye Protect</h1>
<h4>Keep Your Eyes safe</h4>
<input type="text" id="HoursOfWork" placeholder="Enter your hours of work ...." />
<button class="start" onclick="DescreasNo()">Let's Go!</button>
<p id="output01"></p>