手机锁屏js倒计时停止问题解决办法探索

如图,有这么个需求,测试人员在测试过程中提了一个bug,手机锁屏再唤醒倒计时时间没有更新,仍从锁屏的时间继续,于是开始寻找解决之法

经了解得知,锁屏时候,浏览器的一切活动会停止运行,那么js也无法幸免,这时候就想到有没有能监听浏览器活动停止的方法呢?一查,果然有

visibilitychange

具体可参看https://www.css88.com/archives/6103,

重要的就是给window加一个visibilitychange监听,在里面判断document.tVisibilityState的值,如果为hidden,则是页面内容不可见时的钩子,如果不是hidden,则就是可见时的钩子,即唤醒页面或切换应用回到页面的回调。

vue里面使用方法可以参考以下代码

data:() =>{  return {    times:‘‘,    closeTime:‘‘  }}mounted() {
    window.addEventListener(‘visibilitychange‘,this.diffTime)
  },
  beforeDestroy(){
    window.removeEventListener(‘visibilitychange‘, this.diffTime)
  },
  methods: {
    // 处理锁屏时间差
    diffTime() {
      if (document.tVisibilityState ==‘hidden‘) {
       this.closeTime = Date.now()
      } else {
        this.times = this.times - (Date.now() - this.closeTime)/1000;
      }
    },
 }

经实验,加上这段代码后确实倒计时更新了,但是时间显示会快2到3秒,不得其解,感觉应该是取值的时候比屏幕唤醒慢了,比如我锁屏5秒,但是在唤醒时倒计时少了7秒。

也想到了一种办法,就是唤醒时候重新拉取服务端的时间,然后更新虚拟dom,在实际操作中,由于是异步获取,会看到倒计时数字那里有明显的闪一下更新,不利于用户体验。

所以最终还是采用了visibilitychange事件来处理,毕竟用户在这个页面不会停留太久,不过这并没有完美的解决问题,如果你有更好的方法,希望能告诉我。

原文地址:https://www.cnblogs.com/wuyuchao/p/10086982.html

时间: 2024-10-10 14:40:18

手机锁屏js倒计时停止问题解决办法探索的相关文章

华为手机 锁屏密码找回

忘记锁屏密码的不在少数吧,本人及同事就是刚设定了密码,然后就提示密码不对了.. 蛋疼~! 重置手机是解决的办法,但是手机上的个人数据也会丢失,这样损失挺大的. 经过摸索,终于找到一个完美的解决办法,嘎嘎 但是也是有提前的 1.手机启用了云服务,有账号和秘密,这个密码忘记的话直接通过邮箱和手机可以找回. 2.云服务里开启了手机找回的功能. 好了,我们继续下一步,密码找回 登录华为云服务网站: https://hwid1.vmall.com/CAS/portal/cloudLogin.html?va

轻松解开手机锁屏密码!你值得学习!

一.安卓系统 安卓系统设置锁屏密码的方法较多,可以有数字密码.图案密码和PIN码等等.但万一忘记这些密码,解锁的方法无外乎两种. (一)Google账号解锁 前提:被锁机器之前设置并登录了google账号,账号密码已知,且手机可以联网. 步骤: 随意5次输入密码,系统提示5次输入错误,30秒后重试. 此时解锁界面下方会提示“忘记密码”,点击输入之前设置过的Google账号和密码即可立即解锁. (二)清空数据解锁 前提:无任何限制条件,但手机中最好没有重要的用户数据资料. 步骤: 关机状态下同时按

手机锁屏社交APP--偷心锁屏

偷心锁屏是一款主打懒人交友的手机社交锁屏应用,让您在手机屏幕解锁的同时顺带沟通和交友,免去了多数社交应用主动搜索陌生人和打招呼的复杂操作,为您提供一种快捷简便的社交方式! 功能简介 1.根据你的选项系统会给您推荐好友,从而快速你快速寻找到你喜欢的朋友 2.当双方同时激活喜欢的标志,就可以在解锁界面进行聊天 3.加入了魅力排行系统,当喜欢的人越多我们的魅力值就越高 --偷心锁屏

【Android】如何实现Android程序在手机锁屏后继续运行

最近笔者在做一个功能,就是实现Android程序在锁屏后可以继续运行,笔者在网上查了一些资料,现在整理出来,希望能够对你有所帮助. 1.如何监听屏幕锁屏 监听屏幕锁屏可以通过如下方式来实现,直接通过代码来判定,或通过监听器来实现 1)通过代码来判定屏幕的锁屏状态 可以通过PowerManager的isScreenOn方法,代码如下: PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

酷派手机锁屏壁纸提取

前些年从网上买了个酷派手机(Coolpad 5890)做备用机,女朋友看到后,喜欢上了这个手机的锁屏壁纸(确实挺好看的),非要我找给她,作为一个在大学期间就玩过Android手机的IT男来说,这简直是一个绝佳的表现机会.就是下面这个锁屏图片: 根据以前折腾Android手机的经验,像这种系统自带的图片一般在/system/app下的某个系统自带的程序里面,可是任我翻遍了所有这个文件夹下的系统自带程序的图片后(印象中有几万个小图),仍然没找到.也尝试过以图搜图的方式从网上找,可是搜出来的要么是手机

iOS开发之应用内检测手机锁屏,解锁状态

iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import #define NotificationLock CFSTR("com.apple.springboard.lockcomplete") #define NotificationChange CFSTR("com.apple.springboard.lockstate") #define NotificationPwdUI CFSTR(&

Eclipse js报错问题解决办法

最近在Eclipse中导入新项目后会发现js报错,但是不影响程序的运行,但是对于程序员的我们来说多少还是比较在意代码前面的红色的X的,有木有??? 上网也查了很多方法,对于其中一种方法表示不能完全解决问题,即Window>Preferences>Validation>Disable All,因为有的Eclispe这里面没有js Validation或JavaScript Validation那项,有的只是HTML /JSP等, 其次,要考虑这种方法,右键单击项目,Build Path&g

设置-wifi-高级设置,选择仅充电时保持WLAN开启/睡眠期间不保持wlan的开启状态,手机锁屏休眠几分钟后,再点亮屏幕,wifi一直显示开启状态

解决方法:缩短响应的时间: 具体方法: 路径:frameworks/base/services/java/com/android/server/wifi/WifiController.java 代码: class WifiController extends StateMachine { * being enabled but not active exceeds the battery drain caused by * re-establishing a connection to the

微信内嵌H5网页 解决js倒计时失效

项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算,24小时后未支付,会有ws自动取消这个订单),js代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <script type="text/javascript"><br>  var