sessionstorage 可在单次考试中实现倒计时中断恢复:存入考试截止时间戳而非剩余秒数,页面加载时读取并校验,定时更新ui且防重复启动,交卷或超时后主动清理,天然适配单场考试的临时状态管理。

SessionStorage 可以在单次考试中实现倒计时的中断恢复,关键在于:页面刷新或意外关闭后,从 sessionStorage 中读取剩余时间并继续计时,且保证该数据仅在当前浏览器标签页生命周期内有效(关闭标签即清空)。
倒计时开始前:初始化并存入初始时间
考试开始时,计算总时长对应的结束时间戳(而非仅存剩余秒数),存入 sessionStorage。这样能避免因本地时间被手动修改导致的偏差。
- 用 Date.now() + 总毫秒数 得到考试截止时间戳
- 存入 sessionStorage:sessionStorage.setItem('examDeadline', deadlineTimestamp.toString())
- 不建议只存剩余秒数——用户若调快系统时间,会导致倒计时异常变慢或跳过结束逻辑
页面加载时:读取并校验截止时间
每次进入答题页(包括刷新后),先检查 sessionStorage 是否存在 examDeadline,再计算当前剩余时间。
批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
- 读取:const deadline = parseInt(sessionStorage.getItem('examDeadline') || '0')
- 校验:若 deadline ≤ Date.now(),说明已超时,直接触发交卷或禁答逻辑
- 否则,剩余毫秒 = deadline - Date.now(),转为分秒格式启动倒计时
倒计时运行中:定时更新并防重复启动
使用 setInterval 更新 UI,并确保同一页面不会因多次加载而叠加多个定时器。
- 设置定时器前先清理可能存在的旧定时器:clearInterval(this.timer)
- 每秒更新一次 UI,同时可选择性地重新写入 sessionStorage(非必须,因 deadline 不变)
- 页面卸载前(如用户关闭标签)无需手动清除 sessionStorage —— 它会自动销毁
交卷或超时时:主动清理状态
考试正常结束或超时后,应清除 sessionStorage 中的相关键,避免影响下一次考试(尤其是同一标签页内重试)。
- 交卷成功后:sessionStorage.removeItem('examDeadline')
- 超时自动提交后同样执行 removeItem
- 注意:不要在 beforeunload 中做异步操作(如发请求),但同步清理 sessionStorage 是安全的
SessionStorage 天然适合单场考试的临时状态管理——它不跨标签、不持久化、不发送到服务端,正好匹配“一次考试、一个窗口”的业务场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










