作者:©Iaine 万一
简介:30 Day Challenge是 Wes Bos 设计的一个 30 天原生js编程挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。本项目为第28天的“倒计时计时器”项目。Have fun with the website! ♪(^∇^*)
源代码:https://github.com/janice143/JavaScript30Program/tree/master/29%20CountdownTimer/index.htm
本项目的笔记内容选自 大史不说话,他本人是JS30社区里的知名参与者,他的全部笔记在这里。
本项目的笔记在这里。
挑战任务
初始文档index-start.html
中提供了一个倒计时控制器,从html
文档的结构可以看出,顶部的按钮可以用来增加倒计时时间,常用的时间间隔已将参数绑定在data-time
属性上;display
类用来显示计时的结果。
本次编程挑战的任务是通过javascript代码基于当前时间生成一个倒计时,将结束时间
和剩余时间
分别显示在diaplay__time-left
类标签和display__end-time
类标签上。
实现效果
[](https://github.com/soyaine/JavaScript30/blob/master/29 - Countdown Timer/effect.png)
编程思路
监听按点击事件click
来为倒计时增加时间,使用setInterval
函数每秒执行判断函数,若倒计时事件到,则清除当前计时器,若时间未到,则计算并刷新页面上应该显示的时间。
过程指南
1.定义变量及获取需要操作的DOM元素的引用。
1 | const endTime = document.querySelector(".display__end-time"); |
2.为button绑定点击事件,当按钮点击时执行对应的回调函数。
1 | const arr = Array.from(buttons); |
3.监听表单的提交事件,注意表单的调用方式。
1 | document.customForm.addEventListener('submit',function(e){ |
4.点击后的回调函数中取得点击按钮传递的秒数,调用updateTime()
函数更新页面显示结果,并调用updateTimer()
来更新计时器相关动作.
1 | function clickAction(e){ |
5.updateTime()
函数用来更新和页面相关的显示信息。
1 | function updateTime(delta){ |
6.updateTimer()
函数用来执行和设定每秒检查计时器是否需要继续工作的逻辑判断。
1 | function updateTimer(){ |
延伸思考
本次代码中前后会定义定时器和清除定时器,另一种做法是定时器一直工作不清除,对应的按钮和表单只修改时间,不用调整定时器,当值发生变化后,下一秒定时器检测时就会开始倒计时,这样代码逻辑上会有所简化,感兴趣的朋友可以自行练习。
JS30的第29个项目圆满完成啦,感谢阅读,有问题联系我的邮箱[email protected].