<div id="title">Countdown timer</div>
<div id="container">
<div id="input">
<input type="text" placeholder="HH" maxLength="2" id="h" value="00" /> :
<input type="text" placeholder="MM" maxLength="2" id="m" value="00" /> :
<input type="text" placeholder="SS" maxLength="2" id="s" value="03" />
<button id="start" onclick="startBtn()">Start</button>
</div>
<div id="output">
<span id="output_h"></span> :
<span id="output_m"></span> :
<span id="output_s"></span>
<button id="pause" onclick="pauseBtn()">Pause</button>
<button id="resume" onclick="resumeBtn()">Resume</button>
<button id="reset" onclick="resetBtn()">Reset</button>
</div>
</div>
body {
display: flex;
flex-flow: column wrap;
justify-content: center;
align-items: center;
}
#title {
margin: 20px 0;
}
#input {
display: block;
}
#output {
display: none;
}
#resume {
display: none;
}
/*
* https://frontendeval.com/questions/countdown-timer
*
* Create a countdown timer that notifies the user
*/
let input = document.getElementById('input');
let output = document.getElementById('output');
const h = document.getElementById('h');
const m = document.getElementById('m');
const s = document.getElementById('s');
const output_h = document.getElementById('output_h');
const output_m = document.getElementById('output_m');
const output_s = document.getElementById('output_s');
let interval;
function startBtn() {
if (h.value !== '' && m.value !== '' && s.value !== '') {
if (onlyNumber(h.value) && onlyNumber(m.value) && onlyNumber(s.value)) {
output_h.innerText = (h.value).padStart(2, '0');
output_m.innerText = (m.value).padStart(2, '0');
output_s.innerText = (s.value).padStart(2, '0');
output.style.display = 'block';
input.style.display = 'none';
docTitle(h.value, m.value, s.value);
timer(parseInt(h.value), parseInt(m.value), parseInt(s.value));
}
}
};
function onlyNumber(value) {
return /[0-9]/.test(value);
}
function timer(hour, minute, second) {
interval = setInterval(() => {
if (second > 0) {
second -= 1;
if (hour === 0 && minute === 0 && second === 0) console.log('countdown timer complete!');
} else if (minute > 0) {
minute -= 1;
second = 59;
} else if (hour > 0) {
hour -= 1;
minute = 59;
second = 59;
} else clearInterval(interval);
let result_h = (hour < 10) ? '0' + hour : hour;
let result_m = (minute < 10) ? '0' + minute : minute;
let result_s = (second < 10) ? '0' + second : second;
docTitle(result_h, result_m, result_s);
output_h.innerText = result_h;
output_m.innerText = result_m;
output_s.innerText = result_s;
}, 1000);
}
let pause = document.getElementById('pause');
let resume = document.getElementById('resume');
function pauseBtn() {
clearInterval(interval);
pause.style.display = 'none';
resume.style.display = 'inline-block';
}
function resumeBtn() {
pause.style.display = 'inline-block';
resume.style.display = 'none';
let h = parseInt(output_h.textContent);
let m = parseInt(output_m.textContent);
let s = parseInt(output_s.textContent);
timer(h, m, s);
}
function resetBtn() {
clearInterval(interval);
output.style.display = 'none';
input.style.display = 'block';
}
function docTitle(h, m, s) {
document.title = h + ' : ' + m + ' : ' + s;
}
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.