-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
101 lines (92 loc) · 3.41 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
const FULL_DASH_ARRAY = 2 * Math.PI * 140;
const circle = document.querySelector('.progress-ring__circle');
const startButton = document.getElementById('start-button');
const timeDisplay = document.getElementById('time-display');
const controls = document.querySelector('.controls');
const container = document.querySelector('.container');
let interval;
let totalTime;
let remainingTime;
startButton.addEventListener('click', () => {
const minutes = parseInt(document.getElementById('minutes').value) || 0;
const seconds = parseInt(document.getElementById('seconds').value) || 0;
totalTime = minutes * 60 + seconds;
remainingTime = totalTime;
clearInterval(interval);
updateDisplay();
startTimer();
controls.classList.add('fade-out');
setTimeout(() => {
controls.style.display = 'none';
}, 500);
});
function startTimer() {
interval = setInterval(() => {
if (remainingTime <= 0) {
clearInterval(interval);
showCompletionMessage();
} else {
remainingTime--;
updateDisplay();
}
}, 1000);
}
function updateDisplay() {
const minutes = Math.floor(remainingTime / 60);
const seconds = remainingTime % 60;
timeDisplay.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
updateCircle();
}
function updateCircle() {
const offset = FULL_DASH_ARRAY - (remainingTime / totalTime) * FULL_DASH_ARRAY;
circle.style.strokeDasharray = `${FULL_DASH_ARRAY} ${FULL_DASH_ARRAY}`;
circle.style.strokeDashoffset = offset;
if (remainingTime <= 10) {
container.classList.add('pulse');
} else {
container.classList.remove('pulse');
}
}
function showCompletionMessage() {
timeDisplay.textContent = "Time's up!";
const resetButton = document.createElement('button');
resetButton.textContent = "Reset";
resetButton.addEventListener('click', resetTimer);
controls.innerHTML = '';
controls.appendChild(resetButton);
controls.style.display = 'flex';
controls.classList.remove('fade-out');
}
function resetTimer() {
clearInterval(interval);
timeDisplay.textContent = "00:00";
circle.style.strokeDasharray = `${FULL_DASH_ARRAY} ${FULL_DASH_ARRAY}`;
circle.style.strokeDashoffset = FULL_DASH_ARRAY;
container.classList.remove('pulse');
controls.innerHTML = `
<div class="time-setting">
<label for="minutes">Minutes:</label>
<input type="number" id="minutes" placeholder="00" min="0">
<label for="seconds">Seconds:</label>
<input type="number" id="seconds" placeholder="00" min="0" max="59">
</div>
<button id="start-button">Start</button>
`;
document.getElementById('start-button').addEventListener('click', () => {
const minutes = parseInt(document.getElementById('minutes').value) || 0;
const seconds = parseInt(document.getElementById('seconds').value) || 0;
totalTime = minutes * 60 + seconds;
remainingTime = totalTime;
clearInterval(interval);
updateDisplay();
startTimer();
controls.classList.add('fade-out');
setTimeout(() => {
controls.style.display = 'none';
}, 500);
});
controls.style.display = 'flex';
}
// Initialize circle
circle.style.strokeDasharray = `${FULL_DASH_ARRAY} ${FULL_DASH_ARRAY}`;
circle.style.strokeDashoffset = FULL_DASH_ARRAY;