如图,有这么个需求,测试人员在测试过程中提了一个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事件来处理,毕竟用户在这个页面不会停留太久,不过这并没有完美的解决问题,如果你有更好的方法,希望能告诉我。

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

  1. html5在手机熄屏后倒计时会出现延迟情况

    今天开发了一个手机端的倒计时,然后同事说出现了Bug,怎么回事呢?Bug很简单,就是在手机返回主界面或者熄屏后倒计时会暂停在熄屏前的时间(注意时间是页面加载时获取的服务器的时间),问题很简单,知道问题 ...

  2. 自选项目--手机锁屏软件--NABC分析

    N(Need 需求) 关键字:利用碎片时间加强对想记的事物的记忆.备忘.一般来说,锁屏目的大致有三点: 1.保护手机隐私 2.防止误操作手机 3.在不关闭系统软件的情况下节省电量 对于市面上已有的锁屏 ...

  3. 360wifi: 手机锁屏360wifi掉线的解决方法

    如遇到iphone锁屏断网的情况,按照以下操作步骤可以解决一部分用户的问题 (该问题并不是360WifFi问题,与苹果机制有关)如有安卓手机掉线,请确保手机连接其他Wifi并不会掉线,然后尝试粉色字体 ...

  4. Android 监听手机锁屏的工具类

    自定义 ScreenListener package com.example.teagardenhd.Listener; import android.content.BroadcastReceive ...

  5. 【填坑往事】Android手机锁屏人脸解锁优化过程实录

    背景 写这篇文章,主要是为了以后面试方便.因为我简历上写了,上一份工作的最大亮点是将人脸解锁的速度由1200ms优化到了600ms,所以这些内容已经回答无数遍了.但每次总觉得回答的不完整,或者说总感觉 ...

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

    iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...

  7. Eclipse js报错问题解决办法

    最近在Eclipse中导入新项目后会发现js报错,但是不影响程序的运行,但是对于程序员的我们来说多少还是比较在意代码前面的红色的X的,有木有??? 上网也查了很多方法,对于其中一种方法表示不能完全解决 ...

  8. js倒计时 手机休眠时 时间不进行减少

    http://www.111cn.net/wy/js-ajax/94218.htm 手机版网页js倒计时存在的问题与解决的方法 www.111cn.net 更新:2015-09-16 编辑:kp123 ...

  9. WP 手机Lumia 820 锁屏密码的破解研究

    Windows Phone lumia 手机锁屏密码的破解研究     大家好今天给大家分享一个最新研究案例, 近日笔者接Nokia Lumia 820, 由于客户密码失误太多,导致锁屏23000余分 ...

随机推荐

  1. nginx 初探 之反向代理

    首先要解释的是什么叫做反向代理? 平时我们浏览网页可以输入网址直接访问,  但如果访问国外的网站,  可能就没那么简单('中国特色'),  这时候我们需要配置一个代理服务器, 然后通过此服务器中转来访 ...

  2. POJ 3348 Cows 凸包 求面积

    LINK 题意:给出点集,求凸包的面积 思路:主要是求面积的考察,固定一个点顺序枚举两个点叉积求三角形面积和除2即可 /** @Date : 2017-07-19 16:07:11 * @FileNa ...

  3. Python进行数据分析—可视化之seaborn

    安装seaborn,可以使用 pip: pip install seaborn 也可以使用 conda: conda install seaborn 一个简单的箱线图: import numpy as ...

  4. 数据库-SQLite

    技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  数据库-SQLite 技术博客http:// ...

  5. c++刷题(6/100)最长上升子序列

    题目一:区间子数组个数 给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R). 求连续.非空且其中最大元素满足大于等于L 小于等于R的子数组个数. 例如 : 输入: A = ...

  6. Verilog笔记.4.inout端口

    inout是一个双向端口,实现为使用三态门,第三态为高阻态‘z’. 在实际电路中高阻态意味着响应的管脚悬空.断开. 当三态门的控制信号为真时,三态门选通,作输出端口使用:控制信号为假时,三态门是高阻态 ...

  7. c语言学习笔记.条件编译.#if,#ifdef,if的区别

    最近遇到了,以此做个记录. 条件编译 是C预处理部分的内容. 其判断语句包括 #if  #else if  #else 以及 #ifdef 和 #endif. 使用 #if (表达式) codes1. ...

  8. 海洋CMS v6.53 v6.54命令执行

    测试下载地址:https://pan.baidu.com/s/1jHQBKFk 至于分析实在是看的一脸懵逼就不累赘了.直接上exp POST /haiyang/upload/search.php HT ...

  9. go 数据变量和操作符

    数据类型 布尔类型 a. var b bool 和 var b bool = true 和 var b = falseb. 操作符 == 和 !=c. 取反操作符: !bd. && 和 ...

  10. Android设备相关配置

    http://source.android.com/devices/tech/storage/index.html Android supports devices with external sto ...