1. 程式人生 > >h5 ios 切入後臺執行倒計時問題

h5 ios 切入後臺執行倒計時問題

實操解決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>

其實主要是以拿取本地的時間的時間差作為所行走的時間 即使把程式切入後臺在次切回的時間差是改變的,所以倒計時再時間上也是改變的。