我有这个倒数计时器。由于某种原因,它在一分钟后停止计数-只是停止了。如果我计数55分钟,它将在54:00停止,如果我计数2分钟,它将在1:00停止。
这是JSFiddle链接:带有cookie的倒数计时器
和JS代码:
function countdown(minutes) {
var seconds = 60;
var mins = minutes;
if(getCookie("minutes")&&getCookie("seconds"))
{
var seconds = getCookie("seconds");
var mins = getCookie("minutes");
}
function tick() {
var counter = document.getElementById("timer");
setCookie("minutes",mins,10)
setCookie("seconds",seconds,10)
var current_minutes = mins-1
seconds--;
counter.innerHTML =
current_minutes.toString() + ":" + (seconds < 10 ? "0" : "") + String(seconds);
//save the time in cookie
if( seconds > 0 ) {
setTimeout(tick, 1000);
} else {
if(mins > 1){
// countdown(mins-1); never reach “00″ issue solved:Contributed by Victor Streithorst
setTimeout(function () { countdown(mins - 1); }, 1000);
}
}
}
tick();
}
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
countdown(55);
我不知道您为什么在这里使用Cookie,但撇开这些,您的问题似乎出在以下几行:
var seconds = getCookie("seconds");
var mins = getCookie("minutes");
在第一分钟结束后的代码中,您只需不到一分钟即可再次调用倒数计时功能。但是,上面的几行将分钟变量返回到其先前的值。因此,经过一分钟后,您最终在同一分钟内陷入困境。
因此,我假设您只需从Cookie中获取一次时间(第一次运行倒计时)。您可以使用如下所示的内容:
var firstTime = true;
function countdown(minutes) {
var seconds = 60;
var mins = minutes;
if(firstTime && getCookie("minutes")&&getCookie("seconds"))
{
firstTime = false;
seconds = getCookie("seconds");
mins = getCookie("minutes");
}
...
请注意,
var
在if子句中这是不必要的,因为您已经定义了seconds
和mins
变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句