-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
97 lines (74 loc) · 2.8 KB
/
index.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
let countdownTimer;
function startCountdown(duration) {
let remainingTime = duration;
updateTimeSection('seconds', remainingTime);
countdownTimer = setInterval(() => {
remainingTime--;
updateTimeSection('seconds', remainingTime);
if (remainingTime <= 0) {
clearInterval(countdownTimer);
}
}, 1000);
}
function getTimeSegmentElements(segmentElement) {
const segmentDisplay = segmentElement.querySelector('.segment-display');
const segmentDisplayTop = segmentDisplay.querySelector('.segment-display__top');
const segmentDisplayBottom = segmentDisplay.querySelector('.segment-display__bottom');
const segmentOverlay = segmentDisplay.querySelector('.segment-overlay');
const segmentOverlayTop = segmentOverlay.querySelector('.segment-overlay__top');
const segmentOverlayBottom = segmentOverlay.querySelector('.segment-overlay__bottom');
return {
segmentDisplayTop,
segmentDisplayBottom,
segmentOverlay,
segmentOverlayTop,
segmentOverlayBottom,
};
}
function updateSegmentValues(displayElement, overlayElement, value) {
displayElement.textContent = value;
overlayElement.textContent = value;
}
function updateTimeSegment(segmentElement, timeValue) {
const segmentElements = getTimeSegmentElements(segmentElement);
if (parseInt(segmentElements.segmentDisplayTop.textContent, 10) === timeValue) {
return;
}
segmentElements.segmentOverlay.classList.add('flip');
updateSegmentValues(
segmentElements.segmentDisplayTop,
segmentElements.segmentOverlayBottom,
timeValue
);
function finishAnimation() {
segmentElements.segmentOverlay.classList.remove('flip');
updateSegmentValues(
segmentElements.segmentDisplayBottom,
segmentElements.segmentOverlayTop,
timeValue
);
this.removeEventListener('animationend', finishAnimation);
}
segmentElements.segmentOverlay.addEventListener('animationend', finishAnimation);
}
function updateTimeSection(sectionID, timeValue) {
const firstNumber = Math.floor(timeValue / 10) || 0;
const secondNumber = timeValue % 10 || 0;
const sectionElement = document.getElementById(sectionID);
const timeSegments = sectionElement.querySelectorAll('.time-segment');
updateTimeSegment(timeSegments[0], firstNumber);
updateTimeSegment(timeSegments[1], secondNumber);
}
function resetAndStartCountdown() {
clearInterval(countdownTimer);
startCountdown(10);
}
document.getElementById('startButton').addEventListener('click', () => {
resetAndStartCountdown();
});
document.getElementById('restartButton').addEventListener('click', () => {
resetAndStartCountdown();
});
window.onload = () => {
startCountdown(10);
};