javascript - 如何防止我的 JavaScript 计时器在页面重新加载时重新启动

标签 javascript php

我的 PHP 包含文件中有此代码用于在线测验。如何阻止我的 JavaScript 计时器在页面刷新时重新启动?我对本地存储和 cookie 很陌生。请有人帮助我编写示例代码或修改我的代码。

<div class="timer">Time Remaining <span id="display"></span> minutes!</div> 

<script>
    function CountDown(duration, display) {
        if (!isNaN(duration)) {
            var timer = duration, minutes, seconds;

            var interVal=  setInterval(function () {
                minutes = parseInt(timer / 60, 10);
                seconds = parseInt(timer % 60, 10);

                minutes = minutes < 10 ? "0" + minutes : minutes;
                seconds = seconds < 10 ? "0" + seconds : seconds;

                $(display).html("<b>" + minutes + "m : " + seconds + "s" + "</b>");

                if (--timer < 0) {
                   timer = duration;
                   SubmitFunction();
                   $('#display').empty();
                   clearInterval(interVal)
                }
            },1000);
        }
    }

    function SubmitFunction(){
        window.location.href = "quizResult.php";    
    }

    CountDown(60,$('#display'));    

</script>

最佳答案

就像 @geekley 所说,您可以存储计时器最初开始的时间。实现此目的的一个简单方法是利用本地存储,您提到过对此还不太了解。

我可能会做的就是像这样设置时间:

localStorage.setItem('StartTime', Date.now())

当用户访问或加载页面时,您可以初步检查该值。因此这行代码可能会更改为:

var startTime = localStorage.getItem('StartTime')

// if startTime exists, calculate your counter like so:
// timeRemaining = (initial countdown value) - (CurrentTime - StartTime)

var timeRemaining // declare this variable and set it to whatever value you'd like as a default

if (startTime) {
    timeRemaining = timeRemaining - (Date.now() - startTime)
} else {
    localStorage.setItem('StartTime', Date.now())
}

然后,调用 CountDown 函数并传递 timeRemaining 变量作为参数。您可能需要编辑逻辑来计算毫秒到分钟,但看起来您对此有很好的掌握。我希望这有帮助!

编辑
比较 Date.now() 的实例将返回毫秒。您可以查看mozilla docs有关处理此问题的更多信息。

关于javascript - 如何防止我的 JavaScript 计时器在页面重新加载时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197565/

相关文章:

javascript - 在 php 上传之前使用 FileReader 调整多个图像的大小

javascript - 为什么当我在参数传递过程中增加函数值时,函数却收到原始值?

javascript - 如何从两个不同的表单集中只选择一个单选按钮?

php - 在 IE(和 Firefox)中处理后退按钮的最佳实践是什么

php如何查找给定节点的所有子节点

php - 使用 javascript 添加的文本框没有按预期响应附加到它的 js

javascript - 在 laravel 5.3 中调用未定义的方法 Illuminate\Database\Query\Builder::attach()

javascript - Chrome 和 Safari 的正则表达式负向前瞻

javascript - 如何只替换第一个节点

javascript - future Chrome 应用程序中的内容脚本?