JSFiddle - React, Tailwind, and code Playground
HTML
<div class="c-add-task-main-container">
<h2 class="c-add-task-title">Time Tracker</h2>
<button class="start">Start</button>
<button class="clear">Clear</button>
<div class="output">00:00:00</div>
</div>
<div class="c-add-task-main-container">
<h2 class="c-add-task-title">Time Tracker</h2>
<button class="start">Start</button>
<button class="clear">Clear</button>
<div class="output">00:00:00</div>
</div>
JavaScript
let startTimeButtons = document.querySelectorAll(".start")
let seconds = [-1, -1];
let interval = [];
if (localStorage.getItem("stopwatchSeconds") != null) {
seconds = JSON.parse(localStorage.getItem("stopwatchSeconds"));
seconds = seconds.map(n => parseInt(n))
}
const timer = (el, i) => {
seconds[i]++;
localStorage.setItem("stopwatchSeconds", JSON.stringify(seconds));
// Get hours
let hours = Math.floor(seconds[i] / 3600).toString().padStart(2, 0);
// Get minutes
let minutes = Math.floor((seconds[i] - hours * 3600) / 60).toString().padStart(2, 0);
// Get seconds
let secs = Math.floor(seconds[i] % 60).toString().padStart(2, 0);
el.parentElement.querySelector('.output').innerHTML = `${hours}:${minutes}:${secs}`;
};
startTimeButtons.forEach((btn, index) => {
timer(btn, index); // update time on page load
btn.addEventListener("click", () => {
if (btn.textContent == 'Start') {
btn.textContent = 'Pause';
interval[index] = setInterval(timer, 1000, btn, index);
} else {
btn.textContent = 'Start';
clearInterval(interval[index]);
}
});
})