简单而不简单的倒计时

大家对倒计时的第一反应就是通过setTimeout方法来反复执行,貌似这个问题都没有需要探讨的价值,其实不然。

不同手机上和pc上的new Date()会有些许差异,所以比如说给定一个未来的时间戳,你获取当前时间与未来时间戳的时间差,并不是获取new Date()然后与未来时间戳进行相减,而是通过当前服务器时间来获取这个最初的时间差,而这个服务器时间不一定和你电脑上的时间统一。一般会以北京时间为标准时间

获取当前时间和未来时间戳的最初时间差后,我们就开始倒计时了,这时大家都会考虑到要用setTimeout执行来进行倒计时,可是这个在移动端的时候,会存在问题么

事实是显然的,js在ios端上会存在锁定的问题,当你手指长时间停留在屏幕上时,ios会识别并停止一切js的执行,那么当然setTimeout也就失效了,当你手指离开屏幕时,你会发现,哎,好像时间不对啊

所以我们需要对这种情况进行对应处理,需要过一段时间校验一次时间差,并重新开始倒计时,我目前采用的是60s的时候重新校验一次时间。便于保证iOS倒计时正常(当然,校验前可能仍会存在数秒的偏差,这个可能仍需处理)

其实倒计时还存在一个问题。。。setTimeout(function(){},1000)并不是严格的一秒执行一次函数,所以如果我们的倒计时是利用的setTimeout(function(){},time)这种形式的,本身倒计时时间也会存在一定偏差

        当然一般人没这么死抠。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值