@@ -10,12 +10,17 @@ const overlay = document.querySelector('#overlay');
1010const minutes = document . querySelector ( '#minute' ) ;
1111const seconds = document . querySelector ( '#second' ) ;
1212
13+ // 1. ADD A GLOBAL VARIABLE TO KEEP TRACK OF THE TIMER
14+ let currentTimerId ;
15+
1316function showTimer ( ) {
1417 overlay . style . visibility = 'visible' ;
1518 overlay . style . opacity = 0.97 ;
1619}
1720
1821function hideTimer ( ) {
22+ // 2. STOP THE TIMER WHEN HIDING THE WINDOW
23+ clearTimeout ( currentTimerId ) ;
1924 overlay . style . visibility = 'hidden' ;
2025 resetStroke ( ) ;
2126 resetTitle ( ) ;
@@ -89,8 +94,11 @@ function changeTimer() {
8994}
9095
9196function startFocusTimer ( atStart , time ) {
92- // Timer manual stop
93- if ( minutes . innerHTML === '--' && minutes . innerHTML === '--' ) {
97+ // 3. MAKE SURE TO CLEAR ANY PREVIOUS TIMERS
98+ clearTimeout ( currentTimerId ) ;
99+
100+ // Timer manual stop (Fixed original typo: minutes && seconds)
101+ if ( minutes . innerHTML === '--' && seconds . innerHTML === '--' ) {
94102 changeLabels ( false ) ;
95103 hideTimer ( ) ;
96104 return ;
@@ -103,10 +111,15 @@ function startFocusTimer(atStart, time) {
103111 return ;
104112 }
105113 [ minutes . innerHTML , seconds . innerHTML ] = formatTime ( atStart , time ) ;
106- setTimeout ( startFocusTimer , 1000 , atStart , time ) ;
114+
115+ // 4. SAVE THE NEW TIMER ID
116+ currentTimerId = setTimeout ( startFocusTimer , 1000 , atStart , time ) ;
107117}
108118
109119function startBreakTimer ( atStart , time ) {
120+ // 3. MAKE SURE TO CLEAR ANY PREVIOUS TIMERS
121+ clearTimeout ( currentTimerId ) ;
122+
110123 // Timer manual stop
111124 if ( minutes . innerHTML === '--' && seconds . innerHTML === '--' ) {
112125 hideTimer ( ) ;
@@ -119,7 +132,9 @@ function startBreakTimer(atStart, time) {
119132 return ;
120133 }
121134 [ minutes . innerHTML , seconds . innerHTML ] = formatTime ( atStart , time ) ;
122- setTimeout ( startBreakTimer , 1000 , atStart , time ) ;
135+
136+ // 4. SAVE THE NEW TIMER ID
137+ currentTimerId = setTimeout ( startBreakTimer , 1000 , atStart , time ) ;
123138}
124139
125140export {
@@ -129,4 +144,4 @@ export {
129144 startBreakTimer ,
130145 startFocusTimer ,
131146 postPomodoro ,
132- } ;
147+ } ;
0 commit comments