在Javascript中多次刷新后保持计时器一致

Art*_*hur 0 javascript jquery timer

我有一个倒数计时器,每当我快速按F5时,计时器就会冻结。我猜这是因为页面在setInterval之前重新加载。我正在寻找一种重新加载页面的方法,同时保持计时器运行,正在发生什么情况是在setInterval可能完成之前页面重新加载

<h3 style="color:#000000" align="center">
         Time Remaining : <span id='timer'></span>
         </h3>

<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script>

//define your time in second
    var c = localStorage.getItem("timer");
    if(c == null)c = 3600;

    var t;
    timedCount();

    function timedCount()
    {

        var hours = parseInt( c / 3600 ) % 24;
        var minutes = parseInt( c / 60 ) % 60;
        var seconds = c % 60;

        var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes <        10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);


        $('#timer').html(result);
        if(c == 0 )
        {
            //setConfirmUnload(false);
            //$("#quiz_form").submit();
            window.location="logout.html";
        }
        c = c - 1;
        localStorage.setItem("timer", c);
        t = setTimeout(function()
        {
            timedCount()
        },1000);


    }


</script>
Run Code Online (Sandbox Code Playgroud)

Pau*_*sen 5

存储计时器启动时计时器应完成的时间,然后从该值中减去当前时间即可获得计时器应完成的时间。该日期对象可以很好地用于此。

的HTML

<p id="display">Time Left<p>
<button id="start">Start</button>
Run Code Online (Sandbox Code Playgroud)

Java脚本

var start = document.getElementById("start");
var dis = document.getElementById("display");
var finishTime;
var timerLength = 10;
var timeoutID;
dis.innerHTML = "Time Left: " + timerLength;

if(localStorage.getItem('myTime')){
    Update();
}
start.onclick = function () {
    localStorage.setItem('myTime', ((new Date()).getTime() + timerLength * 1000));
    if (timeoutID != undefined) window.clearTimeout(timeoutID);
    Update();
}

function Update() {
    finishTime = localStorage.getItem('myTime');
    var timeLeft = (finishTime - new Date());
    dis.innerHTML = "Time Left: " + Math.max(timeLeft/1000,0);
    timeoutID = window.setTimeout(Update, 100);
}
Run Code Online (Sandbox Code Playgroud)

在这里查看工作示例:JSFiddle