Это работает для меня, но правильный ли способ создать этот таймер?
Я могу быть наивным в этом отношении, но я думаю, что это близко к идеалу в чистом JS.
В чем будут недостатки использования этого таймера по сравнению с его созданием другим способом?
- Нажмите «Пуск», и таймер начнет обратный отсчет.
- Нажмите «Сброс», и таймер вернется к начальному времени.
HTML:
<button onclick='startStopTimer()'>Start</button>
<button onclick='startStopTimer()'>Reset</button>
<h1>00:10</h1>
JavaScript:
console.clear()
let timer = document.querySelector('h1')
let startingTime = 9
let startTimer;
let startStopTimer = () => {
if(startTimer){
clearInterval(startTimer);
timer.innerHTML = '00:10'
startingTime = 9
return startTimer = undefined
}else{
return startTimer = setInterval(()=>{
timer.innerHTML = `00:0${startingTime--}`
}, 1000)
}
}
2 ответа
HTML
- Встроенный
onClick
обработчик событий, прикрепленный к вашему элементу HTML, вероятно, работает нормально; однако есть более эффективные способы обработки событий в чистом JS. В следующий раз добавьте обработчики событий в файл JS следующим образом:element.addEventListener('click', callbackName)
. h1
это заголовок. Я бы не стал помещать значение таймера в этот конкретный тег. я думаю чтоspan
здесь будет лучше по семантическим правилам HTML.
JavaScript
- Некоторые из ваших
let
переменные на основе могут быть изменены наconst
. Идея состоит в том, чтобы использоватьconst
всякий раз, когда это возможно. Если это не так, только тогда используйтеlet
. innerHTML
это опасный метод. Его можно использовать для выполнения XSS-атак. Старайтесь избегать отображения текста на вашем сайте.
Из небольшого обзора;
- Ты используешь
9
дважды, это должно быть присвоено хорошо названной глобальной константе - Вы жестко кодируете оба
9
и00:10
, это не гибко. Я ожидал, что смогу изменить9
к99
и чтобы таймер запускался в01:40
- По аналогии,
00:0${startingTime--}
не допускает большой гибкости в сценарии - Браузер пытается в честь
1000
, но этому нельзя доверять. Вы должны отслеживать исходное начало и вычитать его из текущего времени, чтобы определить, сколько времени прошло. В противном случае таймер ненадежен. - Размещение таймера в
h1
элемент, вероятно, не является хорошей идеей семантически - Весь ваш код должен быть в хорошо названной (самоисполняющейся) функции
- Я не уверен, почему вы возвращаете что-нибудь в
startStopTimer
? Если вы никогда не используете возвращаемое значение, просто отбросьтеreturn
ключевое слово - поскольку
clearInterval
возвращаетсяundefined
и поскольку это имеет смысл, я бы выбралstartTimer = clearInterval(startTimer);
- Почему
console.clear()
? В производственном коде следует избегатьconsole