Javascript 使用jquery,我如何制作一个可以立即重新启动并明显倒计时的计时器?

Javascript 使用jquery,我如何制作一个可以立即重新启动并明显倒计时的计时器?,javascript,jquery,timer,setinterval,Javascript,Jquery,Timer,Setinterval,主要的问题是清除,无论我做什么,间隔似乎为每次点击运行多个计时器,即使我清除 我整晚都在做这件事。 我只是想重新启动一个倒计时点击。 我试着给这个人5秒钟的准备时间 然后用7秒来做这个动作。 所以,它需要从5开始倒计时,然后从7开始倒计时,如果单击,它需要随时重新开始 这比听起来难多了 我用了两种 clearInterval() var Interval = setInterval(function(){}, 1000); 但无法使其工作。setTimeout()返回一个可用于取消请求的标识符

主要的问题是清除,无论我做什么,间隔似乎为每次点击运行多个计时器,即使我清除

我整晚都在做这件事。 我只是想重新启动一个倒计时点击。 我试着给这个人5秒钟的准备时间 然后用7秒来做这个动作。 所以,它需要从5开始倒计时,然后从7开始倒计时,如果单击,它需要随时重新开始

这比听起来难多了

我用了两种

clearInterval()
var Interval = setInterval(function(){}, 1000);
但无法使其工作。

setTimeout()返回一个可用于取消请求的标识符:

var timerId = setTimeout(function() { console.log('Now!'); }, 5000);
然后,您可以稍后取消它,除非它已被执行:

$('#cancelTimerButton').click(function() {  clearTimeout(timerId); });
如果需要将其可视化,可以执行以下操作:

var n = 0;
var tick = function() {
    console.log(n % 2 ? 'Tock' : 'Tick');
    timerId = setTimeout(tick, 1000);
    if (++n == 5) {
        clearTimeout(timerId);
    }
};
var timerId = setTimeout(tick, 1000);`
试试这个:

var timer = (function() {
    var timer = null;

    return {
        start: function( timesToRun, callback, interval ) {
            var timesRan = 0
            timer = setInterval( function() {
                if ( timesRan < timesToRun ) {
                    timesRan++
                    callback( timesRan, timesRan === timesToRun )
                } else {
                    clearInterval( timer )
                }
            }, interval || 1000 )

            return this 
        },

        stop: function() {
            clearInterval( timer )

            return this
        }
    }
}())

var cyclesLabel = document.getElementById("t")

// first argument is the amount of times to run the interval
// second argument is a callback to use on each iteration
// the 3rd argument is optional and is the interval time in milliseconds.
timer.start( 7, totalCycles, 1000 )

// Reset example
document.getElementById("btn").addEventListener( "click", function() {
   cyclesLabel.textContent = "0"
   timer.stop().start( 5, totalCycles )
} )

// Just for the sake of the example
function totalCycles( cycles, lastCycle ) {
   cyclesLabel.textContent = cycles

   if ( lastCycle === true ) {
     alert( "This is the last chance to do something" )
   }
}
var timer=(函数(){
var定时器=null;
返回{
开始:函数(timesToRun、回调、间隔){
var timesRan=0
计时器=设置间隔(函数(){
如果(时间运行<时间运行){
时差++
回调(timesRan,timesRan===timesToRun)
}否则{
清除间隔(计时器)
}
},间隔| | 1000)
还这个
},
停止:函数(){
清除间隔(计时器)
还这个
}
}
}())
var cyclesLabel=document.getElementById(“t”)
//第一个参数是运行间隔的次数
//第二个参数是在每次迭代中使用的回调
//第三个参数是可选的,是以毫秒为单位的间隔时间。
定时器启动(7,总周期,1000)
//重置示例
document.getElementById(“btn”).addEventListener(“单击”,函数)(){
cyclesLabel.textContent=“0”
timer.stop().start(5个总周期)
} )
//只是为了举个例子
函数totalCycles(cycles,LastCycles){
cyclesLabel.textContent=周期
如果(lastCycle==真){
警惕(“这是做某事的最后机会”)
}
}

您应该将
setInterval
返回的id提供给
clearInterval
,即
clearInterval(Interval)
谢谢您的评论,但我这样做了,您如何使用setTimeout进行视觉倒计时?您可以使用1秒(1000毫秒)还有一个计数器?我希望我能用这么简单的工具写这么漂亮复杂的代码。这里没有什么特别的,你只需要读一两本书就可以加强你的js知识。