Skip to content

Commit b43fdaf

Browse files
committed
refactor: 重构脚本
1 parent afaad8e commit b43fdaf

File tree

1 file changed

+52
-85
lines changed

1 file changed

+52
-85
lines changed

src/BootstrapBlazor/Components/FlipClock/FlipClock.razor.js

Lines changed: 52 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
153120
const setFlip = (flip, index, countDown) => {
154121
const before = flip.querySelector('.before');
155122
if (before) {

0 commit comments

Comments
 (0)