JS 倒计时问题,手机网页后台运行时,js会暂停。但是时间还在走,当用户返回主界面的时候倒计时就不准了。这个有什么办法解决吗
首先计算出预计结束时间。
假如需要倒计时10秒,那么结束时间就是 当前时间戳 + 10秒。
网页后台运行,重新打开的时候,用预计结束时间 - 当前时间戳。
(非专业前端,想法仅供参考)
使用JS计时确实会存现这种问题,js脚本在浏览器出处后台情况时是全部暂停执行的,有些浏览器在tab切换也会暂停,包括setInterval和webworker不管是同步还是异步,那么解决方案也有很多种,需要根据你的实际项目情况来定
比如一个很简单的30秒倒计时任务,后台js停止执行,但系统时间是不会停止的。建议使用系统时间做比对,简码如下
let st = Date.now(),
i = 0,
itv = setInterval(()=>{
i = ~~((Date.now() - st)/1000);
if(i >= 3){
clearInterval(itv)
alert('time over')
}
},1000);
你这个问题可以试一下用这个 js 来尝试:https://github.com/leeenx/tim...
使用 timer.setTimeout & timer.setInterval 替代原生的 setTimeout & setInterval 试一下。具体的 API 如下: https://github.com/leeenx/tim...
这个 timer 是用 RAF 模拟的。当 js 挂起时,它也会挂起。
1 回答851 阅读✓ 已解决
1 回答1.1k 阅读
2 回答773 阅读
2 回答617 阅读
2 回答601 阅读
1 回答677 阅读
2 回答520 阅读
有个visibilitychange事件,浏览器标签页被隐藏或显示的时候会触发.隐藏时记录时间戳,显示时记录时间戳,求二者之差/1000得到离开时间。
这是我的想法,没测试过,不知道能否成功,只是一个建议,你可以试一试
当然只是倒计时的话你可以判断visibilityState =='visible'里面重新获取时间戳,重启倒计时