0

0

如何实现一个简单的倒计时器_前端倒计时功能开发指南

P粉602998670

P粉602998670

发布时间:2026-01-31 09:47:19

|

514人浏览过

|

来源于php中文网

原创

用 setTimeout 递归调用更可靠。因 setInterval 在页面切走或休眠时易累积误差,而 setTimeout 每次基于 Date.now() 动态校准;倒计时终止条件应为 remainingMs ≤ 0,及时清定时器并更新 UI,避免卡在 00:00:01 或超时仍可点击。

如何实现一个简单的倒计时器_前端倒计时功能开发指南

倒计时逻辑用 setInterval 还是 setTimeout

setTimeout 递归调用更可靠。浏览器标签页切走或系统休眠时,setInterval 容易累积误差甚至跳过多次回调;而 setTimeout 每次都基于当前时间重新计算剩余毫秒,能动态校准。

实操建议:

  • 每次触发后,用 Date.now() 获取当前时间,和目标时间做减法,得到真实剩余毫秒
  • 不依赖“每秒减一”的累加逻辑,避免因执行延迟导致倒计时不准
  • 清除定时器必须用对应的 clearTimeout(配 setTimeout)或 clearInterval(配 setInterval),混用会失效

如何处理倒计时结束后的状态更新?

倒计时归零不能只靠“剩余秒数 === 0”判断,因为浮点误差或执行延迟可能导致跳过 0,直接变成负数。应以剩余毫秒 ≤ 0 为终止条件,并立即清除定时器、更新 UI。

常见错误现象:

立即学习前端免费学习笔记(深入)”;

  • 倒计时卡在 00:00:01 不变,实际已超时
  • 按钮仍可点击,但接口返回 400 Bad Request(如活动已结束)

正确做法:

塔可商城
塔可商城

塔可商城, 一个基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序、管理后台,后端服务的项目,它内置提供了会员分销, 区域代理, 商品零售等功能的新零售电商系统。强大弹性的架构设计,简洁的代码,最新的技术栈,全方面适合不同需求的前端,后端,架构的同学,同时更是企业开发需求的不二选择。 项目结构通过项目结构,你将清楚明白你即将入手的是一个怎么样的项目,你可能需要什么,如何

下载
  • 检查 remainingMs 后,立刻 clearTimeout(timerId)
  • 同步禁用按钮、隐藏倒计时区域、显示“已结束”文案
  • 如有后续动作(如跳转、弹窗),放在清除定时器之后执行,避免竞态

格式化显示时要注意哪些兼容性细节?

String.prototype.padStart() 在 IE 中不支持,若需兼容旧浏览器,得手写补零逻辑;另外,不同单位换算容易出错,比如误把毫秒当秒除以 60。

推荐安全写法:

  • 总秒数 = Math.floor(remainingMs / 1000),再分别取 hours = Math.floor(totalSec / 3600)minutes = Math.floor((totalSec % 3600) / 60)seconds = totalSec % 60
  • 补零统一用 (num).toString().padStart(2, '0'),或降级为 num
  • 避免使用 toTimeString()toLocaleTimeString(),它们受本地时区和格式影响,不可控

页面卸载或切换标签页时倒计时还在跑?

用户切走再回来,发现倒计时明显滞后甚至直接归零,是因为定时器没暂停。浏览器对后台标签页会节流 setTimeout/setInterval,但不会自动停掉——你得自己响应可见性变化。

实操建议:

  • 监听 document.visibilityState 变化,在 visibilityState === 'hidden'clearTimeout,并记录暂停时刻
  • 切回时('visible'),用当前时间与暂停时刻差值修正剩余毫秒,再继续 setTimeout
  • 也可改用 requestIdleCallback 配合时间戳校验,但复杂度上升,多数场景用 visibility API 就够了
倒计时看着简单,真正稳定运行要同时扛住时间精度、生命周期、用户行为三重干扰。最常被忽略的是:不校验 remainingMs 就清定时器,以及切页后不暂停导致的逻辑漂移。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1157

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

215

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1998

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

22

2026.01.19

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.8万人学习

CSS3 教程
CSS3 教程

共18课时 | 5万人学习

Vue 教程
Vue 教程

共42课时 | 7.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号