2017-02-15 131 views
1

我在将本地计时器存储在localStorage中时遇到问题。每次刷新浏览器时,计时器都会重置。现在我想要做的就是将我的计时器存储在localStorage中,因此每次用户刷新浏览器时计时器都不会重置。请检查下面页面刷新时内置在JavaScript中的计时器重置

HTML我的代码

<p class="w3-xlarge w3-serif"> <i>Linguistics Exam</i><span class="w3-right" id="timeLeft" name="timeLeft"></span></p> 

JS

var total_seconds = 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
    document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

    if(total_seconds <= 0){ 
     $(document).ready(function(){$("#submitLinguistics").click();}); 

    }else{ 
     total_seconds = total_seconds - 1; 
     c_minutes = parseInt(total_seconds/60); 
     c_seconds = parseInt(total_seconds%60); 
     setTimeout("checkTime()", 1000); 
    } 
} 
setTimeout("checkTime()", 1000); 
+1

你的代码在哪里保存到'localStorage'? –

回答

2

首先,更改setTimeoutsetInterval,这将在每一秒,而不是手动调用每个实例setTimeout执行:

var total_seconds = 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

if(total_seconds <= 0){ 
    $(document).ready(function(){$("#submitLinguistics").click();}); 
    clearInterval(myInterval); 
}else{ 
    total_seconds = total_seconds - 1; 
    c_minutes = parseInt(total_seconds/60); 
    c_seconds = parseInt(total_seconds%60); 
} 
} 
var myInterval = setInterval(checkTime, 1000); 

接下来,你需要写total_secondslocalStorage

var total_seconds = localStorage.getItem("total_seconds") ? localStorage.getItem("total_seconds") : 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

if(total_seconds <= 0){ 
    $(document).ready(function(){$("#submitLinguistics").click();}); 
    clearInterval(myInterval); 
}else{ 
    total_seconds = total_seconds - 1; 
    c_minutes = parseInt(total_seconds/60); 
    c_seconds = parseInt(total_seconds%60); 
} 
localStorage.setItem("total_seconds", total_seconds); 
} 
var myInterval = setInterval(checkTime, 1000); 

最后,如果你关闭该选项卡,一段时间后重新打开时,计数器将在原处重新加载,而用户可以通过关闭选项卡,工作骗答案并再次打开。为了应对这种情况,建议与服务器合作,即根据实际日期和负载进行工作,而不是使用localStorage。程序员用户甚至可以在开发工具中从控制台重置定时器。

+0

谢谢主席拉霍斯。它为我工作。但是我给每个用户都给了不同的定时器一个问题。我搜索它并使用sessionStorage来代替。不幸的是,使用sessionStorage也不会重置计时器,即使是针对另一个用户。没有与服务器合作的任何解决方案?谢谢你sir –

+0

@AngeloSaño你可以使用localStorage.getItem(“total_seconds”+ theusername)和localStorage.setItem(“total_seconds”+ theusername,total_seconds);实现这一目标。但是,如果不同的用户使用不同的浏览器,那么他们的localStorage将会不同。 localStorage是浏览器的本地存储,每个浏览器都不相同。如果我的回答帮助你解决了这个问题,那么你可以考虑接受它是正确的。 –

+1

谢谢先生拉霍斯!对不起,我马上就不接受新手,但它确实帮助我解决了我的问题。 –

相关问题