@@ -14,30 +14,15 @@ export function init(id, options) {
1414 return ;
1515 }
1616
17- const listYear = el . querySelector ( '.bb-flip-clock-list.year' ) ;
18- const listMonth = el . querySelector ( '.bb-flip-clock-list.month' ) ;
19- const listDay = el . querySelector ( '.bb-flip-clock-list.day' ) ;
20- const listHour = el . querySelector ( '.bb-flip-clock-list.hour' ) ;
21- const listMinute = el . querySelector ( '.bb-flip-clock-list.minute' ) ;
22- const listSecond = el . querySelector ( '.bb-flip-clock-list.second' ) ;
23- const countDown = options . viewMode === "CountDown" ;
24-
17+ const lastValues = { } ;
2518 let counter = 0 ;
19+ let totalMilliseconds = 0 ;
20+ let countDown = false ;
2621 const getDate = ( ) => {
27- let totalMilliseconds = 0 ;
28- let now ;
29-
30- if ( options . viewMode === "Count" ) {
31- counter += 1000 ;
32- totalMilliseconds = counter - options . startValue ;
33- }
34- else if ( countDown ) {
35- counter += 1000 ;
36- totalMilliseconds = options . startValue - counter ;
37- if ( totalMilliseconds < 0 ) totalMilliseconds = 0 ;
38- }
39- else {
40- now = new Date ( ) ;
22+ const view = options . viewMode ;
23+ countDown = false ;
24+ if ( view === "DateTime" ) {
25+ const now = new Date ( ) ;
4126 return {
4227 years : now . getFullYear ( ) ,
4328 months : now . getMonth ( ) + 1 ,
@@ -47,51 +32,59 @@ export function init(id, options) {
4732 seconds : now . getSeconds ( )
4833 } ;
4934 }
35+ else if ( view === "Count" ) {
36+ counter += 1000 ;
37+ totalMilliseconds = counter - options . startValue ;
38+ }
39+ else if ( view === "CountDown" ) {
40+ countDown = true ;
41+ counter += 1000 ;
42+ totalMilliseconds = options . startValue - counter ;
43+ if ( totalMilliseconds < 0 ) totalMilliseconds = 0 ;
44+ }
5045
5146 const seconds = Math . floor ( totalMilliseconds / 1000 ) % 60 ;
5247 const minutes = Math . floor ( totalMilliseconds / ( 1000 * 60 ) ) % 60 ;
5348 const hours = Math . floor ( totalMilliseconds / ( 1000 * 60 * 60 ) ) % 24 ;
5449 const days = Math . floor ( totalMilliseconds / ( 1000 * 60 * 60 * 24 ) ) ;
55- const months = new Date ( ) . getMonth ( ) + 1 ;
56- const years = new Date ( ) . getFullYear ( ) ;
50+ const months = 0 ;
51+ const years = 0 ;
5752 return { years, months, days, hours, minutes, seconds } ;
58- }
53+ } ;
54+
55+ const getConfig = ( ) => [
56+ { key : 'years' , list : el . querySelector ( '.bb-flip-clock-list.year' ) , digits : 4 } ,
57+ { key : 'months' , list : el . querySelector ( '.bb-flip-clock-list.month' ) , digits : 2 } ,
58+ { key : 'days' , list : el . querySelector ( '.bb-flip-clock-list.day' ) , digits : 2 } ,
59+ { key : 'hours' , list : el . querySelector ( '.bb-flip-clock-list.hour' ) , digits : 2 } ,
60+ { key : 'minutes' , list : el . querySelector ( '.bb-flip-clock-list.minute' ) , digits : 2 } ,
61+ { key : 'seconds' , list : el . querySelector ( '.bb-flip-clock-list.second' ) , digits : 2 } ,
62+ ] ;
63+
64+ const setDigits = ( list , value , digits , countDown ) => {
65+ list . classList . remove ( 'flip' ) ;
66+ for ( let i = 0 ; i < digits ; i ++ ) {
67+ const place = digits - 1 - i ;
68+ const digit = Math . floor ( value / 10 ** place ) % 10 ;
69+ setFlip ( list . children [ i ] , digit , countDown ) ;
70+ }
71+ list . classList . add ( 'flip' ) ;
72+ } ;
5973
60- let lastYear ;
61- let lastMonth ;
62- let lastDay ;
63- let lastHour ;
64- let lastMinute ;
65- let lastSecond ;
6674 const go = ( ) => {
67- const { years, months, days, hours, minutes, seconds } = getDate ( ) ;
68-
69- if ( lastSecond !== seconds ) {
70- lastSecond = seconds ;
71- setTime ( listSecond , seconds , countDown ) ;
72- }
73- if ( lastMinute !== minutes ) {
74- lastMinute = minutes ;
75- setTime ( listMinute , minutes , countDown ) ;
76- }
77- if ( lastHour !== hours ) {
78- lastHour = hours ;
79- setTime ( listHour , hours , countDown ) ;
80- }
81- if ( lastDay !== days ) {
82- lastDay = days ;
83- setTime ( listDay , days , countDown ) ;
84- }
85- if ( lastMonth !== months ) {
86- lastMonth = months ;
87- setTime ( listMonth , months , countDown ) ;
88- }
89- if ( lastYear !== years ) {
90- lastYear = years ;
91- setYear ( listYear , years , countDown ) ;
92- }
93- return { years, months, days, hours, minutes, seconds }
94- }
75+ const d = getDate ( ) ;
76+ const unitConfig = getConfig ( ) ;
77+ unitConfig . forEach ( ( { key, list, digits } ) => {
78+ if ( list === null ) return ;
79+
80+ const v = d [ key ] ;
81+ if ( lastValues [ key ] !== v ) {
82+ lastValues [ key ] = v ;
83+ setDigits ( list , v , digits , countDown ) ;
84+ }
85+ } ) ;
86+ return d ;
87+ } ;
9588
9689 let start = void 0
9790 let current ;
@@ -124,32 +117,6 @@ export function dispose(id) {
124117 }
125118}
126119
127- const setYear = ( list , year , countDown ) => {
128- if ( list ) {
129- list . classList . remove ( 'flip' ) ;
130- for ( var index = 0 ; index < 4 ; index ++ ) {
131- const flip = list . children [ index ] ;
132- const flipIndex = Math . floor ( year / Math . pow ( 10 , 3 - index ) ) % 10 ;
133- setFlip ( flip , flipIndex , countDown ) ;
134- }
135- list . classList . add ( 'flip' ) ;
136- }
137- }
138-
139- const setTime = ( list , time , countDown ) => {
140- if ( list ) {
141- const leftIndex = Math . floor ( time / 10 ) ;
142- const rightIndex = time % 10 ;
143- const leftFlip = list . children [ 0 ] ;
144- const rightFlip = list . children [ 1 ] ;
145-
146- list . classList . remove ( 'flip' ) ;
147- setFlip ( leftFlip , leftIndex , countDown ) ;
148- setFlip ( rightFlip , rightIndex , countDown ) ;
149- list . classList . add ( 'flip' ) ;
150- }
151- }
152-
153120const setFlip = ( flip , index , countDown ) => {
154121 const before = flip . querySelector ( '.before' ) ;
155122 if ( before ) {
0 commit comments