禁用javascript倒计时

时间:2015-10-09 20:58:04

标签: javascript setinterval countdown

我有一个javascript代码,在倒计时结束时会出错。我需要创建一个代码来停止倒计时。它可以开始倒计时但我无法阻止它。 这是我的代码:

function countdown( elementName, minutes, seconds )
{
    var element, endTime, hours, mins, msLeft, time;

    function twoDigits( n )
    {
        return (n <= 9 ? "0" + n : n);
    }

    function updateTimer()
    {
        msLeft = endTime - (+new Date);
        if ( msLeft < 1000 ) {
            givestrongerror(error_timeout);
        } else {
            time = new Date( msLeft );
            hours = time.getUTCHours();
            mins = time.getUTCMinutes();
            element.innerHTML = (hours ? hours + ':' + twoDigits( mins ) : mins) + ':' + twoDigits( time.getUTCSeconds() );
            setTimeout( updateTimer, time.getUTCMilliseconds() + 500 );
        }
    }

    element = document.getElementById( elementName );
    endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500;
    updateTimer();
}

我可以使用此选项从5分钟开始倒计时:

countdown( "countdown", 5, 00 );

2 个答案:

答案 0 :(得分:0)

您只需清除超时即可。 setTimeout()会返回一个超时ID,可用于使用clearTimeout()清除它。

var countdown_timeout_id;

function startCountdown()
{
  countdown_timeout_id = window.setTimeout(function() { /*blah*/ }, 100);
}

function stopCountdown()
{
  window.clearTimeout(countdown_timeout_id);
}

如果你想让用户停止它,你可以在倒计时功能的底部返回一个带有stopCountdown功能的对象。

return {
  stop: stopCountdown
}   

答案 1 :(得分:0)

通过将clearTimeout分配给变量setTimeoutsetTimeout上的timeout使用//make timeout global var timeout = null; function countdown( elementName, minutes, seconds ) { var element, endTime, hours, mins, msLeft, time; function twoDigits( n ) { return (n <= 9 ? "0" + n : n); } function updateTimer() { msLeft = endTime - (+new Date); if ( msLeft < 1000 ) { givestrongerror(error_timeout); } else { time = new Date( msLeft ); hours = time.getUTCHours(); mins = time.getUTCMinutes(); element.innerHTML = (hours ? hours + ':' + twoDigits( mins ) : mins) + ':' + twoDigits( time.getUTCSeconds() ); //set variable 'timeout' to the setTimeout that could be erroneous timeout = setTimeout( updateTimer, time.getUTCMilliseconds() + 500 ); } } element = document.getElementById( elementName ); endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500; updateTimer(); } //call this function to end the timeout function endTimeout(){ clearTimeout(timeout); }

MyWorker.perform_async('Aname')