50projects50days/simple-timer/script.js
2024-02-22 11:17:56 -05:00

65 lines
1.9 KiB
JavaScript

const resetBtn = document.querySelector('#reset');
const playBtn = document.querySelector('#play');
const timerEl = document.querySelector('#timer');
const root = document.querySelector(':root');
// Initial setup
const totalSeconds = 60;
let playing = false;
let currentSeconds = totalSeconds;
timerEl.innerText = formatTime(totalSeconds);
const timerInterval = setInterval(run, 1000);
playBtn.addEventListener('click', () => {
playing = !playing;
playBtn.classList.toggle('play');
playBtn.classList.toggle('bg-green-500'); // Toggle the color class
const playIcon = playBtn.querySelector('i');
playIcon.classList.toggle('fa-play'); // Toggle the play icon
playIcon.classList.toggle('fa-pause'); // Toggle the pause icon
});
resetBtn.addEventListener('click', resetAll);
// Run the timer
function run() {
if (playing) {
currentSeconds -= 1;
if (currentSeconds <= 0) {
clearInterval(timerInterval);
resetAll();
}
timerEl.innerText = formatTime(currentSeconds);
root.style.setProperty('--degrees', calcDeg());
}
}
// Format the time
function formatTime(seconds) {
const minutes = Math.floor(seconds / 60);
const newSeconds = seconds % 60;
return `${minutes.toString().padStart(2, '0')}:${newSeconds
.toString()
.padStart(2, '0')}`;
}
// Calculate the degrees
function calcDeg() {
return `${360 - (currentSeconds / totalSeconds) * 360}deg`;
}
// Reset all the values
function resetAll() {
playing = false;
playBtn.classList.remove('play');
playBtn.classList.remove('bg-green-500'); // Remove the color class
const playIcon = playBtn.querySelector('i');
playIcon.classList.remove('fa-pause'); // Remove the pause icon
playIcon.classList.add('fa-play'); // Add the play icon
currentSeconds = totalSeconds;
timerEl.innerText = formatTime(totalSeconds);
root.style.setProperty('--degrees', '0deg');
}