前言
本文為「JavaScript 30」教學影片的學習筆記。
目標
製作一個倒數計時器。
筆記
建立一個計數器的指標。
選取倒數時間文字。
1
| const timerDisplay = document.querySelector('.display__time-left');
|
選取結束時間文字。
1
| const endTime = document.querySelector('.display__end-time');
|
選取所有設有 data-time
屬性的按鈕。
1
| const buttons = document.querySelectorAll('[data-time]');
|
建立一個 timer()
方法,以倒數計時。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function timer(seconds) { clearInterval(countdown); const now = Date.now(); const then = now + seconds * 1000; displayTimeLeft(seconds); displayEndTime(then); countdown = setInterval(() => { const secondsLeft = Math.round((then - Date.now()) / 1000); if (secondsLeft < 0) { clearInterval(countdown); return; } displayTimeLeft(secondsLeft); }, 1000); }
|
建立一個 displayTimeLeft()
方法,以顯示剩餘時間。
1 2 3 4 5 6 7 8 9 10 11 12
| function displayTimeLeft(seconds) { const minutes = Math.floor(seconds / 60); const remainSeconds = seconds % 60; const display = `${minutes}:${remainSeconds < 10 ? '0' : ''}${remainSeconds}`; timerDisplay.textContent = display; document.title = display; }
|
建立一個 displayEndTime()
方法,以顯示結束時間。
1 2 3 4 5 6 7 8 9 10 11 12
| function displayEndTime(timestamp) { const end = new Date(timestamp); const hour = end.getHours(); const adjustedHour = hour > 12 ? hour - 12 : hour; const minutes = end.getMinutes(); endTime.textContent = `Be Back At ${adjustedHour}:${minutes < 10 ? '0' : ''}${minutes}`; }
|
建立一個 startTimer()
方法,以開始倒數計時。
1 2 3 4 5 6
| function startTimer() { const seconds = parseInt(this.dataset.time); timer(seconds); }
|
監聽所有按鈕,當發生 click
行為時,觸發 startTimer()
方法。
1
| buttons.forEach(button => button.addEventListener('click', startTimer));
|
監聽表單,當發生 submit
行為時,觸發閉包。
1 2 3 4 5 6 7 8 9 10
| document.customForm.addEventListener('submit', function (e) { e.preventDefault(); const mins = this.minutes.value; timer(mins * 60); this.reset(); });
|