2011-08-01 66 views
1
var sec = 10 
var timer = setInterval(function() { 
$('#timer span').text(sec--);  
if (sec == -1) { 
    clearInterval(timer); 
} }, 1000); 

html 

<div id="timer"><span>10</span> seconds</div> 
<a href="#" id="recount">Recount</a> 

当我点击重新计数时,我想要做的事情是重新计时10秒钟?setInterval重新计算?

我怎么可能做到这一点? 最好使用setInterval()setTimeout()

回答

2

分解出你的代码的功能,所以你可以调用在启动时或相同的代码链接被点击。你可以看到它在这里工作:http://jsfiddle.net/jfriend00/x3S7j/。这甚至可以让你在倒计时期间点击链接,它将重新开始。

$("#recount").click(function() { 
    initCounter(10); 
}); 

var remainingTime; 
var runningInterval = null; 

function initCounter(duration) { 

    function stopCounter() { 
     if (runningInterval) { 
      clearInterval(runningInterval); 
      runningInterval = null; 
     } 
    } 

    stopCounter();        // stop previously running timer 
    remainingTime = duration;     // init duration 
    $('#timer span').text(remainingTime);  // set initial time remaining 
    runningInterval = setInterval(function() { // start new interval 
     $('#timer span').text(remainingTime--);  
     if (remainingTime < 0) { 
      stopCounter(); 
     } 
    }, 1000); 
} 


initCounter(10); 
+0

这是工作很棒!那个我想要做的事我得到了最后的答案,非常感谢你! – noviceRick

1

当您单击各显神通,你应该

sec = 10; 
clearInterval(timer); 
timer = setInterval(that_function, 1000); 

此外,还有setIntervalsetTimeout之间的差异。 setInterval调度每个毫秒需要调用的函数。 setTimeout调度函数在几毫秒后调用一次。

+0

你有一点,但如何在页面加载时运行that_function?然后这就是当我点击recount时它会重新计算 – noviceRick

2

你可以只添加一个单击处理程序,并分解出你的代码在一个单独的方法:

var sec = 10; 
var timer; 

function startCountdown() { 
    if (timer) clearInterval(timer); 
    sec = 10; 

    timer = setInterval(function() { 
     $('#timer span').text(sec--); 
     if (sec == -1) { 
      clearInterval(timer); 
     } 
    }, 1000); 
} 

$(function() { 
    startCountdown(); 
    $("#recount").click(startCountdown); 
}); 

Working JSFiddle

+0

谢谢,但它似乎不起作用10seonds计时器没有运行,当我点击重新计数它不会太 – noviceRick

+0

@Gerald:检查jsfiddle链接 - 它的工作原理就好了 – BrokenGlass

+0

它与jfriend00一样也很棒谢谢你们我真的赞扬你的回答:)我是js的新手 – noviceRick