html5在手机熄屏后倒计时会出现延迟情况
今天开发了一个手机端的倒计时,然后同事说出现了Bug,怎么回事呢?Bug很简单,就是在手机返回主界面或者熄屏后倒计时会暂停在熄屏前的时间(注意时间是页面加载时获取的服务器的时间),问题很简单,知道问题所在,百度!在网上查了好多,然后发现一个很神奇的事件:visibilityChange,先在PC端实验,然后发现切换网页再切回来能触发这个事件,好事啊,那是不是移动端也可以这样处理呢,网页切回来或者熄屏后重新打开然后重新获取后台时间不是就OK了吗,说干就干:代码如下:
document.addEventListener('visibilityChange', function() {
if (document.VisibilityState == 'hidden') {
alert("backStage");
} else {
alert("welocme back");
}
}, false);
PC端切换页面能弹出东西,好开心,然而(我想大家都怕好事后面的然而),移动端没反应?What?为啥不行?说好的当文档从可见变为不可见或者从不可见变为可见时,会触发该事件,可是确实没触发,对了可能是兼容问题,这个事件的兼容性贼恶心,捣饬了大段的代码,然后。。。
· 伤心,换个方式,很多大神说调用webSocket,不过感觉好麻烦,放弃,再想办法,程序猿么,天生就是解决问题的,再想办法,然后就有了一下这种方式(当然是以牺牲一点点性能实现的)
逻辑很简单,页面初始化时获取服务器的事件,然后再获取本地时间,然后求出服务器时间和本地时间是的差值,然后再计时器运行时每秒获取一次时间戳,然后加上前面运算的到的差值,也就是说每一秒都获取当前的时间戳然后要通过运算得到目前服务器的时间,下面上代码:
var mulse = "";
var timer = null;
var overTime = new Date("2018/6/18 08:30:00").getTime(); //设置倒计时结束时间 // var now = new Date().getTime(); //获取打开时时间
var now = null;
var serverTime = 1527042000000; //获得服务器时间
now = new Date().getTime(); //获得当前本地时间
var serverTimeMulse = serverTime - now; //获得初始化时间差
timer = setInterval(function() {
now = new Date().getTime() + serverTimeMulse; //获取此刻服务器时间
mulse = overTime - now; //获得结束时间与当前是按的差值
var d = TouDo(Math.floor(mulse / (1000 * 60 * 60 * 24))); //通过运算得到天数
mulse -= d * (1000 * 60 * 60 * 24); //获取剩余的时间用来获取小时数
var h = TouDo(Math.floor(mulse / (1000 * 60 * 60))); //得到小时数
mulse -= h * (1000 * 60 * 60); //获取剩余的时间用来获取分钟数
var min = TouDo(Math.floor(mulse / (1000 * 60))); //得到分钟数
mulse -= min * (1000 * 60); //获取剩余的时间用来获取秒数
var s = TouDo(Math.floor(mulse / 1000)); //得到秒数
});
function TouDo(n) {
return n >= 10 ? "" + n : "0" + n;
}
之后测试,没问题,Bug解除,虽然此种方式顺利解决Bug,但是还是存在如下问题:
1、 性能问题,每秒都获取时间戳会影响页面的性能
2、用户在退出本页面然后修改时间之后再重新打开本页面(注意是未刷新情况),初始化的时间差不能及时更新
各位过路大神有新的见解还望不吝赐教 ^(*_*)^
html5在手机熄屏后倒计时会出现延迟情况的更多相关文章
- 手机锁屏js倒计时停止问题解决办法探索
如图,有这么个需求,测试人员在测试过程中提了一个bug,手机锁屏再唤醒倒计时时间没有更新,仍从锁屏的时间继续,于是开始寻找解决之法 经了解得知,锁屏时候,浏览器的一切活动会停止运行,那么js也无法幸免 ...
- MSM8909的触摸屏驱动导致的熄屏后重新亮屏速度慢的原因!【转】
转自:https://blog.csdn.net/kk20000/article/details/83041081 使用的汇顶的触摸驱动的时候会重新亮屏速度慢3秒,而在使用另外一个敦泰触摸驱动的时候没 ...
- HTML5学习总结-09 拖放和手机触屏事件
一 拖放 拖放(Drag 和 drop)是 HTML5 标准的组成部分.拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 课程参考 ht ...
- 无法开机 如果您的手机黑屏无法开机,可以按照以下方式操作尝试: 如果是,使用原装充电器或使用弱电流方式充电(例如使用电脑USB接口充电)充电15-30分钟后尝试重新开机;注意:电量过低引起的无法开机,刚插入充电器时可能不亮屏但呼吸灯闪烁状态。
https://www.mi.com/service/support/startup 无法开机 如果您的手机黑屏无法开机,可以按照以下方式操作尝试: 技术支持 如何刷机 无法开机 手机自动关机.重启 ...
- HTML5开发手机项目—个人总结
让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/> 1)html上加 ...
- HTML5开发手机项目-个人总结(转)
让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/> 1)html上 ...
- HTML5轻松实现全屏视频背景
想在你的网页首页中全屏播放一段视频吗?而这段视频是作为网页的背景,不影响网页内容的正常浏览.那么我告诉你有一款Javascript库正合你意,它就是Bideo.js. 参考网址: https://ww ...
- Android中手机录屏并转换GIF的两种方式
之前在博文中为了更好的给大家演示APP的实现效果,本人了解学习了几种给手机录屏的方法,今天就给大家介绍两种我个人用的比较舒服的两种方法: (1)配置adb环境后,使用cmd命令将手机界面操作演示存为视 ...
- HTML5开发手机应用--viewport的作用
在用HTML5开发手机应用或手机网页时,<head>部分总会有如下一段代码,这段代码到底什么意思呢.在网上,大家会得到很多答案.我从网上搜集了部分介绍,整理一下,以留备用. <met ...
随机推荐
- Linux学习系列——零基础开始
第一部分 Linux基础命令 1.查看系统信息命令 2.Linux内核版本 3.修改环境变量
- Digester学习笔记(二)转载
为便于理解,将笔记的内容结构作了一些调整. 对象栈 对digester技术最普通的应用,是用来动态创建一个由Java对象构成的树结构,各对象的属性以及对象间的关系,基于XML文档的内容来设置(XML文 ...
- Freemark与spring整合
SpringMVC环境的搭建在这里就不多说了,我们这节主要是FreeMarker与SpringMVC整合 首先,在springmvc的配置文件普通视图之前,加入freemarker的视图 fre-se ...
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)
索引类型 1. 唯一索引:唯一索引不允许两行具有相同的索引值 2. 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...
- 如何在github上上传readme文件
首先打开记事本写好文字 然后保存为readme.md文件 打开github网页,登录自己的账号,选择右上角new repository 填写信息,勾选选项如下 创建好之后,选择upload files ...
- docker中安装Jenkins
1.获取Jenkins镜像(不要直接docker pull jenkin,这样获取的不是最新的版本,后续安装部分插件会不成功) docker pull jenkins/jenkins 创建文件夹 su ...
- RobotFramework中查询数据库相关
先要安装:robotframework-databaselibrary,并导入RIDE 封装“连接数据库”关键字,内容如下: 断开数据库:Disconnect From Database,没有参数 一 ...
- GRPC .netcore
GRPC是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRPC ...
- OCP 052新加的考试题收集整理-第20道
20. Which is true about the SYSTEM and SYSAUX tablespaces? A) The SYSAUX tablespace can be made read ...
- 16、xtrabackup 增量备份及恢复
备份命令如下 备份命令如下 全量备份 # innobackupex -p123123 /backup # ls /backup 2017-04-08_13-36-11 增量备份或差量备份 # inn ...