鍍金池/ 問答/HTML5  HTML/ JS 倒計時問題,手機網(wǎng)頁后臺運行時,js會暫停

JS 倒計時問題,手機網(wǎng)頁后臺運行時,js會暫停

JS 倒計時問題,手機網(wǎng)頁后臺運行時,js會暫停。但是時間還在走,當(dāng)用戶返回主界面的時候倒計時就不準(zhǔn)了。這個有什么辦法解決嗎

回答
編輯回答
款爺

之前的答案理解錯了。。。

2018年4月11日 15:02
編輯回答
熟稔

你這個問題可以試一下用這個 js 來嘗試:https://github.com/leeenx/tim...

使用 timer.setTimeout & timer.setInterval 替代原生的 setTimeout & setInterval 試一下。具體的 API 如下: https://github.com/leeenx/tim...

這個 timer 是用 RAF 模擬的。當(dāng) js 掛起時,它也會掛起。

2018年4月7日 15:09
編輯回答
憶往昔

使用JS計時確實會存現(xiàn)這種問題,js腳本在瀏覽器出處后臺情況時是全部暫停執(zhí)行的,有些瀏覽器在tab切換也會暫停,包括setIntervalwebworker不管是同步還是異步,那么解決方案也有很多種,需要根據(jù)你的實際項目情況來定
比如一個很簡單的30秒倒計時任務(wù),后臺js停止執(zhí)行,但系統(tǒng)時間是不會停止的。建議使用系統(tǒng)時間做比對,簡碼如下

let st = Date.now(),
    i = 0,
    itv = setInterval(()=>{
        i = ~~((Date.now() - st)/1000);
        if(i >= 3){
            clearInterval(itv)
            alert('time over')
        }
    },1000);
2017年4月20日 19:20
編輯回答
女流氓

多一種思路希望能開闊以下、可能變復(fù)雜了、
記錄每次登錄進來的時間、再運算

2017年2月8日 05:48
編輯回答
你的瞳

我測試過用webworker去開定時器是不會停的,提供一個思路而已

2017年11月7日 17:01
編輯回答
囍槑

有個visibilitychange事件,瀏覽器標(biāo)簽頁被隱藏或顯示的時候會觸發(fā).隱藏時記錄時間戳,顯示時記錄時間戳,求二者之差/1000得到離開時間。
這是我的想法,沒測試過,不知道能否成功,只是一個建議,你可以試一試

var start,end,s;
      document.addEventListener('webkitvisibilitychange', function () {
        if (document.webkitVisibilityState == 'hidden') {
            start = new Date().getTime();
            } else {
            end = new Date().getTime(); 
                s = ((end-start)/1000);    //為秒         
            }
        });
        document.addEventListener('mozvisibilitychange',function() {
            if (document.mozVisibilityState == 'hidden') {
                start = new Date().getTime();
            } else {
            end = new Date().getTime(); 
                s = ((end-start)/1000);
            }
        });

當(dāng)然只是倒計時的話你可以判斷visibilityState =='visible'里面重新獲取時間戳,重啟倒計時

2018年2月9日 19:47
編輯回答
憶當(dāng)年

記錄時間戳,每過一秒計算一次當(dāng)前時間和時間戳的差值

2018年4月2日 08:53
編輯回答
野橘

這個一般不是獲取當(dāng)前時間么,就算停了,等在運行的時候還是從當(dāng)前時間倒計時,也是準(zhǔn)確的啊

2017年3月13日 05:33
編輯回答
遲月

首先計算出預(yù)計結(jié)束時間。
假如需要倒計時10秒,那么結(jié)束時間就是 當(dāng)前時間戳 + 10秒。
網(wǎng)頁后臺運行,重新打開的時候,用預(yù)計結(jié)束時間 - 當(dāng)前時間戳。

(非專業(yè)前端,想法僅供參考)

2018年4月29日 08:18