Skip to content

Commit ca12a71

Browse files
authored
Merge pull request #1 from lingduzero/29-countdowntimer
29 countdowntimer
2 parents 92d0d27 + 6ebbd06 commit ca12a71

1 file changed

Lines changed: 44 additions & 54 deletions

File tree

Lines changed: 44 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,51 @@
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

Comments
 (0)