做一个倒计时工具
◆进阶约 12 分钟实践·项目
做一个倒计时工具
这次做一个可以自己设定目标日期的倒计时工具。与前两个项目不同,这次你会学到时间处理和定时更新。
你会学到什么
- JavaScript Date 对象(处理日期和时间)
- setInterval 定时器(让页面每秒自动更新)
- 数学计算在程序中的应用(算时间差)
- 用户输入与交互的双向绑定
- 条件判断(时间到了怎么办)
第一步:Prompt
帮我做一个倒计时网页,要求:
- 用户可以输入目标日期和时间
- 实时显示剩余的天、小时、分钟、秒(每秒更新)
- 四个数字卡片分别显示天/时/分/秒,大号字体
- 达到目标时间后显示"时间到!"并播放庆祝动画(撒花效果)
- 预设几个常用倒计时(元旦、春节、国庆)
- 深色背景 + 霓虹风格,有科技感
- 所有代码写在一个 HTML 文件中
第二步:理解"时间"在程序里怎么算
这次打开 <script> 部分,重点关注这些:
// 所有倒计时的核心:时间差 = 目标时间 - 当前时间
const target = new Date('2026-12-31'); // 目标日期
const now = new Date(); // 当前时间
const diff = target - now; // 相差的毫秒数
// 把毫秒换算成天/时/分/秒
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff / (1000 * 60 * 60)) % 24);
const minutes = Math.floor((diff / (1000 * 60)) % 60);
const seconds = Math.floor((diff / 1000) % 60);
// 关键:setInterval 让代码每 1000 毫秒(1 秒)执行一次
setInterval(updateDisplay, 1000);
这段代码揭示了倒计时的本质:
- 定义一个"目标时间点"
- 每一秒获取一次"当前时间点"
- 算出差值
- 把差值拆成天、时、分、秒
- 显示在页面上
这就是所谓的定时轮询——每隔一段时间检查一次状态。
第三步:迭代改进
- "字体不够大,天数用 80px,其他用 40px"
- "数字之间加上冒号分隔符(像 03:15:42:08 这样)"
- "每个时间单位下面加小字标签"
- "加一些闪烁的光点增加科技感"
- "背景用深色渐变(深蓝到深紫),不要纯黑"
你学到的新能力
这个项目让你掌握了一个和之前完全不同的概念:程序可以在后台持续运行。
| 之前学的 | 这次学的 | |----------|----------| | 个人主页:等用户操作(点击链接) | 倒计时:什么都不做也在自动更新 | | 待办清单:用户触发 → 程序响应 | 倒计时:时间流逝 → 程序响应 |
这叫定时任务(setInterval),几乎无处不在:网页时钟、轮播图、自动保存草稿、消息通知小红点、实时股票行情……
进阶挑战
- 添加多个倒计时同时运行(春节 + 生日 + 考试)
- 倒计时最后 10 秒数字变红闪烁
- 时间到了播放提示音
- 添加"快速设定"按钮(+1 天、+1 周、+1 月)
- 让用户给倒计时起名字("距离毕业还有")
常见问题
"倒计时不准,差了一两秒。"——浏览器中的 setInterval 不是绝对精确的,有 1-2 秒误差完全正常。入门阶段不需要纠结毫秒级精度。
动手练习
修改代码,完成练习目标
完成倒计时逻辑
让倒计时真正运行起来:输入秒数,点击开始倒数
目标:输入秒数点开始,数字每秒减 1,到 0 弹窗提示
动手实践
描述你想要的效果,AI 帮你生成代码
Prompt Playground动手试试
提示:描述越具体,生成效果越好