刷新页面时重置计时器javascript

Posted

技术标签:

【中文标题】刷新页面时重置计时器javascript【英文标题】:timer is reset when the page is refreshed javascript 【发布时间】:2020-04-19 20:10:37 【问题描述】:

我正在尝试制作一个测验计时器。但是,当页面刷新时,计时器会被重置,如何解决这个问题?

<html><h1>Js Timer</h1>
<div style="font-weight: bold;" id="quiz-time-left"></div>
<script type="text/javascript">
    var total_seconds = 60*2
    var c_minutes = parseInt(total_seconds/60);
    var c_seconds = parseInt(total_seconds%60);
    function CheckTime() 
        document.getElementById("quiz-time-left").innerHTML
        ='Time Left: ' + c_minutes + ' minutes ' + c_seconds + ' seconds' ;
        if (total_seconds <=0) 
            setTimeout('document.quiz.submit()',1);
        else
            total_seconds = total_seconds -1;
            c_minutes = parseInt(total_seconds/60);
            c_seconds = parseInt(total_seconds%60);
            
            setTimeout("CheckTime()",1000);
        
    
    setTimeout("CheckTime()",1000);
</script>
<form method="post" name="quiz" action="http://10.11.3.102/sisfo/pegawai/timer"></form>

【问题讨论】:

JavaScript 是客户端编程语言,这意味着任何用户都可以访问它。您需要将计时器放在服务器端或数据库中。您可以只存储开始时间,以便在每次刷新时只获得剩余时间。 【参考方案1】:

如果不需要服务器端定时器,你可以使用 localstorage 来存储定时器中剩余的时间,并在页面刷新时使用。

<html><h1>Js Timer</h1>
<div style="font-weight: bold;" id="quiz-time-left"></div>
<script type="text/javascript">

//Checking localstorage to check if timer is remaning
var total_seconds =window.localStorage.getItem('total_seconds');

    total_seconds = (total_seconds!=null && total_seconds>0)?total_seconds:60*2;
    var c_minutes = parseInt(total_seconds/60);
    var c_seconds = parseInt(total_seconds%60);
    function CheckTime() 
        document.getElementById("quiz-time-left").innerHTML
        ='Time Left: ' + c_minutes + ' minutes ' + c_seconds + ' seconds' ;
        if (total_seconds <=0) 
            setTimeout('document.quiz.submit()',1);

    //Clearing localstorage when reseting timer
    window.localStorage.clear('total_seconds');
        else
            total_seconds = total_seconds -1;
            c_minutes = parseInt(total_seconds/60);
            c_seconds = parseInt(total_seconds%60);

            setTimeout("CheckTime()",1000);
        

    //Updating timer data in localstorage
    window.localStorage.setItem('total_seconds', total_seconds);
    
    setTimeout("CheckTime()",1000);
</script>
<form method="post" name="quiz" action="http://10.11.3.102/sisfo/pegawai/timer"></form>

【讨论】:

亲爱的,用户可以更改local storage @RishiRaut 根据这里的问题,用户只想在页面刷新时保留计时器。如果基本座右铭是即使页面刷新也保留计时器,那么 localstorage 将达到目的。如果要求构建一个严格的计时器,则需要服务器端计时器验证。 @lalugde 如果答案对您有用,请将其标记为解决方案。【参考方案2】:

请注意,每次重新加载页面时,都会从上到下编译/执行整个代码。一旦到达初始化部分:

var total_seconds = 60*2

var c_minutes = parseInt(total_seconds/60);

var c_seconds = parseInt(total_seconds%60);

total_seconds 重置为 60*2

如果您不想重置时间,则必须使用不会随页面重新加载的存储内存。那将是会话。

您可以使用 localStorage,但我不推荐它,因为即使在浏览器关闭时它也会保留变量。

sessionStorage 信息可以在 w3schools here 上找到。

// 存储

sessionStorage.setItem("lastname", "Smith");

// 检索

document.getElementById("result").innerHTML = sessionStorage.getItem("lastname");

当您关闭浏览器选项卡或关闭浏览器时,此数据会重置。

【讨论】:

以上是关于刷新页面时重置计时器javascript的主要内容,如果未能解决你的问题,请参考以下文章

刷新网页时如何防止倒数计时器重置?

使用javascript重置元标记以防止其刷新页面

在页面刷新期间持续存在的 Javascript 倒计时

javascript中的setTimeout怎么用? 我想定时刷新页面!!!

持久的 jQuery 倒计时

刷新页面时重置值