h5 ios 切入後臺執行倒計時問題
阿新 • • 發佈:2019-02-11
實操解決ios切入後臺倒計時不在執行
ios的後臺為虛擬後臺,當把正在執行的程式切入後臺時,邏輯不在執行。但是專案中包含著倒計時,切入後臺時倒計時也不再執行,這就導致切入後臺的程式,再次執行時倒計時的時間對不上!
處理這個問題前,進入了一個誤區,就是想著去監聽執行的程式被切入到後臺,但都以失敗告終。
於是想了一下能不能做一個標記,把這個標記作為一個時間的節點去執行,應該拿什麼去做標記??程式切入後臺時,邏輯不在執行,再次切回來時倒計時還要是正常的狀態,既然跟時間有關,為什麼不去拿去本地的時間呢??
- 倒計時開始前 var start_time
- 在執行倒計時再次 var end_time
- 服務端返回時間戳或自定義時間 var build_time
- 時間差作為時間標記(行走時間) var diff_time = end_time - start_time
開擼!!
<!DOCTYPE HTML>
<html>
<title>time</title>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" >
<script type="text/javascript" src="jquery.js"></script>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
div{
background: skyblue;
width: 100%;
height: 200px;
margin: auto;
display: flex;
color: #fff;
}
p{
margin: auto;
font-size: 30px;
}
span{
width: 40px;
height: 40px;
border-radius: 5px;
display: inline-block;
text-align: center;
line-height: 40px;
background: #fff;
margin: 0 10px;
color: #ff3d00;
}
</style>
</head>
<body>
<div>
<p><span>0</span>天<span>0</span>時<span>0</span>分<span>0</span>秒</p>
</div>
</body>
<script type="text/javascript">
$(function(){
var build_time = 527731; //定義倒計時總數
var start_time = new Date();
start_time = start_time.getTime();//獲取開始時間的毫秒數
downTime = setInterval(function(){
//倒計時實時結束時間
var end_time = new Date();
end_time = end_time.getTime();
//拿到時間差作為時間標記(行走時間)
var diff_time = Math.floor((end_time - start_time));
//建立時間減去行走時間
var cut_time= build_time - diff_time;
if (cut_time> 0) {
nD = checkTime(Math.floor(cut_time/1000/60/60/24));
nH = checkTime(Math.floor(cut_time/(1000*60*60))%24);
nM = checkTime(Math.floor(cut_time/(1000*60))%60);
nS = checkTime(Math.floor(cut_time/1000)%60);
msg = "<span>" + nD + "</span>天<span>" + nH + "</span>時<span>" + nM + "</span>分<span>" + nS + "</span>秒"
$("p").html(msg);
} else {
clearInterval(timer);
//執行你需要的邏輯
alert("多少人曾羨慕你年輕時的容顏!")
}
},1000);
function checkTime(n){
return n < 10 ? '0' + n : '' + n
}
})
</script>
</html>
其實主要是以拿取本地的時間的時間差作為所行走的時間 即使把程式切入後臺在次切回的時間差是改變的,所以倒計時再時間上也是改變的。