【问题标题】:JavaScript countdown timer with cookies stops after one minute带有 cookie 的 JavaScript 倒计时计时器在一分钟后停止
【发布时间】:2015-12-09 12:26:34
【问题描述】:

我有这个倒计时。由于某种原因,它在一分钟后停止计数 - 它只是停止。 如果我数 55 分钟,它会在 54:00 停止 如果我数 2 分钟,它会在 1:00 停止 有什么想法可以解决这个问题,让它持续到零?

这里是 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);

【问题讨论】:

    标签: javascript jquery cookies timer


    【解决方案1】:

    我不知道您为什么在这里使用 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 变量。

    【讨论】:

    • 感谢@axaq,它就像一个魅力!如果时间计数大于 60 分钟,您介意帮我增加小时数吗?
    • @JacquesMarais 为了让它工作,你必须把var firstTime = true;放在第一个function()之外
    【解决方案2】:

    支持日:时:分:秒的代码。 只需将分钟数添加到计时器跨度中即可。 一天的测试,我输入了 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>
    

    【讨论】:

    • 如果您尝试添加 120 分钟 - 计时器显示 02:119:59,它应该是 02:19:59
    • 谢谢,虽然上面省略了 cookie 部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多