手机休眠,js倒计时停止

JavaScript010

手机休眠,js倒计时停止,第1张

在接触到的项目中,有页面需要做倒计时的效果,原本以为很容易,做好之后就提交测试了,但是好巧不巧,测试人员手机屏幕在倒计时过程中熄灭,唤醒屏幕之后发现倒计时是接着黑屏时候的时间继续进行。

问题:手机屏幕熄灭之后,倒计时停止,手机屏幕亮起之后,倒计时接着之前的时间倒计时(即,黑屏这段时间倒计时没有减少)

解决方法:获取倒计时开始时间start_time,在调用countTime是获取一下当前时间end_time,两者的时间差即为休眠时间,使用倒计时总时间-时间差,即为新的倒计时时间

亲测有效,若有其他的好方法求告知

异步执行的函数需要使用回调来获取返回值你那种想等待回调函数执行后再把结果作为返回值的想法是无法实现,并且是极不可取的因为你并不知道需要多久该回调函数才能执行,让主线程阻塞在这儿等待不是一个正确的做法。

正确的做法还是在回调函数中获得值进行处理推荐写法:

var addre =""var bm = new BMap.Map("container")gpsxy = function (xx,yy,i,callback){//添加一个参数作为回调函数,该函数可以获取addre参数

var gpsPoint = new BMap.Point(xx,yy)

bm.clearOverlays()var marker = new BMap.Marker(gpsPoint)bm.addOverlay(marker)

bm.setCenter(gpsPoint)var gc = new BMap.Geocoder()

gc.getLocation(gpsPoint, function(rs){ var addComp = rs.addressComponents

addre = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumbercheck()

if(callback) callback(addre)//把addre传递到回调函数中,这样就可以在函数外部使用返回值了 })}

调用示范:gpsxy(10,10,1,function(addre){ alert(addre)//这儿就可以使用这个值了 })

如果我答得好请给我一点分

在html5中document新增了一个事件 visibilitychange,这个事件在页面前台或后台切换时被触发,你所说的问题就简单了,它也有个对应的属性visibilityState,用于检测当前页面的状态值为hidden还是visible。

解法是,在hidden时记录当前时间,在visible时用当前时间减去之前记录的时间就为当前倒计时需要减去的时间,这也就不需要和后台沟通了,或者你直接在visible时刷新页面也行,下面是小样,你测试一下

var b=getTime()

function getTime()

{

return Date.now()

}

document.addEventListener('webkitvisibilitychange',function()

{

if(document.webkitVisibilityState=='hidden')

{

b=getTime()

}else

{

document.body.appendChild(document.createTextNode('间隔:'+(getTime()-b)))

}

})

document.addEventListener('mozvisibilitychange',function()

{

if(document.mozVisibilityState=='hidden')

{

b=getTime()

}else

{

document.body.appendChild(document.createTextNode('间隔:'+(getTime()-b)))

}

})