1- const endTime = document . querySelector ( ".display__end-time" ) ;
2- const leftTime = document . querySelector ( ".display__time-left" ) ;
3- const buttons = document . querySelectorAll ( "button" ) ;
4- const date = new Date ( ) ;
5- var left = 0 ; //剩余时间
6- var end = 0 ; //结束时间
7- var timer ; //interval计时器
8- leftTime . innerHTML = left ; //未操作时,剩余时间显示0
9-
10- //为button绑定点击事件
11- const arr = Array . from ( buttons ) ;
12- arr . map ( function ( item ) {
13- item . addEventListener ( 'click' , clickAction ) ;
14- } ) ;
15-
16- //监听自定义输入
17- document . customForm . addEventListener ( 'submit' , function ( e ) {
18- e . preventDefault ( ) ;
19- updateTime ( this . minutes . value * 60 ) ;
20- updateTimer ( ) ;
21- } ) ;
22-
23- //定义点击后的回调
24- function clickAction ( e ) {
25- let deltaTime ;
26- deltaTime = this . dataset . time ;
27- updateTime ( deltaTime ) ;
28-
29- //点击后更新计时器
30- updateTimer ( ) ;
1+ let countDown ;
2+ const timerDisplay = document . querySelector ( '.display__time-left' ) ;
3+ const endTime = document . querySelector ( '.display__end-time' ) ;
4+ const buttons = document . querySelectorAll ( '[data-time]' ) ;
5+ function timer ( seconds ) {
6+ clearInterval ( countDown ) ;
7+ const now = Date . now ( ) ;
8+ const then = now + seconds * 1000 ;
9+ dispalyTimeLeft ( seconds ) ;
10+ displayEndTime ( then ) ;
11+ countDown = setInterval ( ( ) => {
12+ const secondsLeft = Math . round ( ( then - Date . now ( ) ) / 1000 ) ;
13+ //check if stop
14+ if ( secondsLeft < 0 ) {
15+ clearInterval ( countDown ) ;
16+ return ;
17+ }
18+ dispalyTimeLeft ( secondsLeft ) ;
19+ } , 1000 ) ;
3120}
3221
33-
34-
35- //updateTime
36- function updateTime ( delta ) {
37- left = left + parseInt ( delta , 0 ) ;
38- end = date . getTime ( ) + left * 1000 ;
39- leftTime . innerHTML = left ;
40- endTime . innerHTML = new Date ( end ) . toLocaleTimeString ( ) ;
22+ function dispalyTimeLeft ( seconds ) {
23+ const minutes = Math . floor ( seconds / 60 ) ;
24+ const displaySeconds = seconds % 60 ;
25+ const display = `${ minutes } :${ displaySeconds < 10 ? '0' : '' } ${ displaySeconds } ` ;
26+ document . title = display ;
27+ timerDisplay . textContent = display ;
4128}
4229
43- //每秒刷新时间
44- function updateTimer ( ) {
45- //清除以前的timer
46- if ( timer ) {
47- clearInterval ( timer ) ;
48- }
30+ function displayEndTime ( timestamp ) {
31+ const end = new Date ( timestamp ) ;
32+ const hour = end . getHours ( ) ;
33+ const minutes = end . getMinutes ( ) ;
34+ endTime . textContent = `Be back at ${ hour > 12 ? hour - 12 : hour } : ${ minutes < 10 ? '0' : '' } ${ minutes } ` ;
35+ }
4936
50- // 设置新的Timer
51- timer = setInterval ( function ( ) {
52- if ( left == 0 ) {
53- endTime . innerHTML = 'End' ;
54- clearInterval ( timer ) ;
55- } else {
56- left -= 1 ;
57- leftTime . innerHTML = left ;
58- }
59- } , 1000 ) ;
37+ function startTimer ( ) {
38+ const seconds = parseInt ( this . dataset . time ) ;
39+ timer ( seconds ) ;
6040}
6141
42+ buttons . forEach ( button => {
43+ button . addEventListener ( 'click' , startTimer ) ;
44+ } )
45+
46+ document . customForm . addEventListener ( 'submit' , function ( e ) {
47+ e . preventDefault ( ) ;
48+ const minutes = this . minutes . value ;
49+ timer ( minutes * 60 ) ;
50+ this . reset ( ) ;
51+ } )
0 commit comments