时、分、秒、百毫秒(100毫秒为1)倒计时

📅 2026/7/9 6:16:59
时、分、秒、百毫秒(100毫秒为1)倒计时
概述本文档描述了PDD系统中高精度倒计时功能的实现支持以100毫秒为单位的精确显示格式。该实现能够精确显示时、分、秒、百毫秒100毫秒四个时间单位。功能特性高精度倒计时精确到100毫秒支持60分钟以下任意时长倒计时实时更新显示每100毫秒刷新一次完善的开始、停止、更新机制自动处理倒计时结束状态核心函数1. startCountdown(remainingMs)开始倒计时函数。参数remainingMs(number): 剩余时间单位为毫秒功能描述清除可能存在的旧定时器记录开始时间和初始剩余时间设置运行状态为true立即执行一次时间更新启动定时器每100毫秒更新一次显示示例// 开始10秒倒计时startCountdown(10000);2. stopCountdown()停止倒计时函数。功能描述清除定时器重置运行状态清空定时器引用示例// 停止当前倒计时stopCountdown();3. updateCountdown()更新倒计时显示的内部函数。功能描述计算已流逝时间计算剩余时间将剩余时间分解为时、分、秒、百毫秒更新状态中的时间显示处理倒计时结束逻辑时间计算逻辑hoursMath.floor(remaining/3600000)// 小时minutesMath.floor(remaining/60000)// 分钟secondsMath.floor(remaining/1000)// 秒hectoMsMath.floor((remaining%1000)/100)// 百毫秒 (0-9)完整代码实现// 倒计时状态管理conststate{timer:null,// 定时器引用startTime:0,// 开始时间戳isRunning:false,// 运行状态countDown:{// 时间显示状态hour:00,minute:00,second:00,millisecond:00,intDiff:0}};/** * 开始倒计时 * param {number} remainingMs - 剩余时间毫秒 */conststartCountdown(remainingMs){// 清除可能存在的旧定时器if(state.timer){clearInterval(state.timer);}conststartTimeDate.now();state.countDown.intDiffremainingMs;state.startTimestartTime;state.isRunningtrue;// 立即更新一次显示updateCountdown();// 启动定时器每100毫秒更新一次consttimersetInterval((){updateCountdown();},100);state.timertimer;};/** * 停止倒计时 */conststopCountdown(){if(state.timer){clearInterval(state.timer);state.isRunningfalse;state.timernull;}};/** * 更新倒计时显示 */constupdateCountdown(){if(!state.isRunning)return;// 计算已流逝时间constelapsedDate.now()-state.startTime;letremainingstate.countDown.intDiff-elapsed;// 检查是否倒计时结束if(remaining0){console.log(倒计时结束);// 重置时间显示state.countDown{hour:00,minute:00,second:00,millisecond:00,intDiff:0,};stopCountdown();return;// 可在此处添加倒计时结束回调}// 计算各部分时间consthoursMath.floor(remaining/3600000);remaining%3600000;constminutesMath.floor(remaining/60000);remaining%60000;constsecondsMath.floor(remaining/1000);consthectoMsMath.floor((remaining%1000)/100);// 100毫秒为单位 (0-9)// 格式化为字符串consthoursStrhours.toString().padStart(2,0);constminutesStrminutes.toString().padStart(2,0);constsecondsStrseconds.toString().padStart(2,0);// 更新状态state.countDown.hourhoursStr;state.countDown.minuteminutesStr;state.countDown.secondsecondsStr;state.countDown.millisecondhectoMs;};使用示例基础使用// 开始1分钟倒计时startCountdown(60000);// 获取当前显示时间console.log(state.countDown);// 输出: { hour: 00, minute: 00, second: 59, millisecond: 9, intDiff: 60000 }// 停止倒计时stopCountdown();显示格式化// 格式化显示时间字符串constformatTime(){const{hour,minute,second,millisecond}state.countDown;return${hour}:${minute}:${second}:${millisecond};};console.log(formatTime());// 输出: 00:00:59:9与UI绑定// 假设有HTML元素// div idcountdown-display00:00:00:0/divconstupdateDisplay(){const{hour,minute,second,millisecond}state.countDown;constdisplaydocument.getElementById(countdown-display);if(display){display.textContent${hour}:${minute}:${second}:${millisecond};}};// 修改updateCountdown函数添加UI更新constupdateCountdown(){// ... 原有逻辑 ...updateDisplay();// 更新UI显示};技术说明时间精度使用Date.now()获取高精度时间戳定时器间隔为100毫秒确保显示流畅性百毫秒显示范围0-9对应0-900毫秒内存管理使用单例模式管理定时器避免定时器泄漏停止时彻底清理状态集中管理便于维护性能优化立即执行一次更新避免初始延迟使用取模运算减少重复计算字符串格式化仅在需要时执行注意事项定时器清理: 确保在组件卸载或页面离开时调用stopCountdown()时间精度: 由于JavaScript定时器特性实际精度可能略有偏差长时间倒计时: 对于超过60分钟的倒计时建议增加分钟处理逻辑状态重置: 重新开始倒计时前会自动清理旧定时器扩展建议添加暂停/继续功能支持自定义时间格式添加倒计时事件回调实现倒计时历史记录添加声音提醒功能版本信息版本: 1.0创建日期: 2026-07-08适用场景: PDD系统倒计时模块