带有cookie的JavaScript倒数计时器会在一分钟后停止

时间:2015-12-08 09:53:14

标签: javascript jquery cookies timer

我有这个倒数计时器。由于某种原因,它在一分钟后停止计数 - 它就停止了。 如果我算上55分钟,它会在54:00停止 如果算上2分钟,它会在1点停止 任何想法如何解决这个问题,以便继续为零?

这是JSFiddle链接:Countdown timer with cookies

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);

2 个答案:

答案 0 :(得分:1)

我不知道你为什么在这里使用cookies,但是把它放在一边,你的问题似乎是以下几行:

var seconds = getCookie("seconds");
var mins = getCookie("minutes");

在完成第一分钟后的代码中,再次拨打倒计时功能一分钟。但是,上面的行将分钟变量返回到其先前的值。所以你在一分钟过后就会在同一分钟内陷入困境。

所以,我认为,你需要从饼干中获取时间一次(第一次倒计时运行)。你可以使用这样的东西:

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");
    }
    ...
  

请注意,if语句中不需要var   定义了secondsmins变量。

答案 1 :(得分:0)

日期代码:小时:分钟:第二次支持。 只需在计时器范围内添加分钟数即可。 对于一天的测试,我进入了1440分钟。

<html>
<body>
<span id="countdown" class="timer">1440</span>
<script type="text/javascript">

var first_time = true;
var countdownTimer;
var seconds = document.getElementById('countdown').innerHTML * 60;
//alert(seconds);
if(!isNaN(seconds) && seconds > 0 ) {

    function timer() {

        if(first_time) {
            countdownTimer = setInterval('timer()', 1000);
            first_time = false;
        }

        var days        = Math.floor(seconds/24/60/60);
        var hoursLeft   = Math.floor((seconds) - (days*86400));
        var hours       = Math.floor(hoursLeft/3600);
        var minutesLeft = Math.floor((hoursLeft) - (hours*3600));
        var minutes     = Math.floor(minutesLeft/60);
        var remainingSeconds = seconds % 60;
        if (remainingSeconds < 10) {
            remainingSeconds = "0" + remainingSeconds; 
        }
        document.getElementById('countdown').innerHTML = (days < 10 ? "0" : "") + days + ":" + (hours < 10 ? "0" : "") + hours + ":" + (minutes < 10 ? "0" : "") + minutes + ":" + (remainingSeconds < 10 ? "0" : "") + remainingSeconds;
        if (seconds == 0) {
            clearInterval(countdownTimer);
            document.getElementById('countdown').innerHTML = "Completed";
        } else {
            seconds--;
        }
    }

    timer()

    //var countdownTimer = setInterval('timer()', 1000);
}
</script>

</body>
</html>