<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
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.