王新阳

wangxinyang

手机熄屏、后台运行时倒计时不准确的解决办法

活动在进行倒计时时,如果手机熄屏、切换程序导致当前程序进入后台)、PC浏览器后台运行(或切换标签页)后,再返回时,可能出现倒计时不准确的现象。原因是程序进入后台运行后浏览器会把定时器调慢,大约是从1秒变为2秒,熄屏后就更慢了。如果是苹果手机定时器直接停止运行。

最初想了个笨办法是定时使用ajax到服务器获取新的时间,结果因为访问量过大,把服务器搞挂了。研究半天,想到了用时间差!打开页面时,计算服务器和本地时间差。后面倒计时时就使用本地时间+时间差,即为服务器时间。不管怎么熄屏都不会出错了。

var diff = 服务器时间 - Math.round(new Date().getTime()/1000,0);
setInterval(function(){
  var serverTime = Math.round(new Date().getTime()/1000,0) + diff;
  ……进行倒计时计算-展示
},1e3);

也可以直接从服务器获取毫秒级时间,进行更精确的控制。如果担心页面打开时延迟导致有小许误差,也可以在页面加载完成后通过ajax从服务器取一次时间,个人感觉误差会更小一些。

2021-09-29
2024-05-01 星期三 农历三月二十三