AI 编程 · 第六章:动手做项目
做一个倒计时工具
时间相关的功能,先想清楚什么时候停
入门约 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 也不影响课程、练习和测验。
学习助手需要时再用
助手说:你好,我是课程里的可选学习助手。正文、练习和进度都在这里,不需要我也能继续。
卡住时,把具体的一段代码或一句话贴过来就好。我们可以一起拆概念、改描述,或者把一个小想法拆成几步来做。
网页小工坊
描述想法后可以选用模型生成代码;也可以直接编辑和预览。
网页小工坊把想法做出来
说清楚页面要做什么,结果会更接近你的想法