为什么我不能在以下示例中使用clearInterval?

时间:2016-12-27 18:33:05

标签: javascript jquery setinterval

我有以下问题。当timer_mou开始计算时,当pause等于closeit时,它不会清除间隔。

我在这里缺少什么?

function my_timer(pause){
    console.log('function: '+pause);

    var timer_mou = setInterval(function() { 
        console.log('counting');
    }, 5000);  

    if (pause == 'closeit') { 
        clearInterval(timer_mou); 
    }     
}

3 个答案:

答案 0 :(得分:4)

只需将url();置于暂停函数之外,即可在全局范围内定义变量setInterval,然后当您调用函数时,它将正确清除它,而不是在每次调用时定义它该功能,请查看下面的工作示例。

希望这有帮助。



timer_mou

var i = 0;
var timer;

start();

$('#pause').on('click',function(){
  pause()
})

$('#restart').on('click',function(){
  restart()
})

function pause(){
  clearInterval(timer);  
}

function restart(){
  i=0;
  pause()
  start();
}

function start(){
  timer = setInterval(function() { 
    i++;
    console.log('Counting '+i);
  },1000);
}




答案 1 :(得分:1)

您需要在函数外部定义timer_mou。在您的情况下,您将无法清除计时器,因为您丢失了对计时器的引用,并且您在每个函数调用时都创建了一个新的计时器实例。

尝试类似:

var timer_mou;

function start_timer() {
  timer_mou = setInterval(function() { 
    console.log('counting');
  }, 5000);
}

function stop_timer() {
  clearInterval(timer_mou);
}

答案 2 :(得分:0)

这是一个非常烦人的问题,与范围有关。当您在函数内部声明setInterval时,唯一可以清除它的地方就是函数的迭代内部。所以,

my_timer("") //Starts a timer in the function
my_timer("closeit") //Starts a timer in the function, then stops it 
//with the other timer running in the background

您可以将问题减少到您的间隔被多次声明的事实,并且您只能在函数内部停止它。所以,如果你想让my_timer函数启动计时器,但是如果你给它参数" pauseit"就停止了,你可以实现这样的事情:

function my_timer(pause){
    console.log('function: '+pause);

    if(typeof timer_mou === "undefined"){ //If the interval already exists, don't start a new one
            timer_mou = //Defines in global scope
            setInterval(function() { 
               console.log('counting');
        }, 5000);  
    }
    if (pause == 'closeit') { 
        clearInterval(timer_mou); 
    }     
}

因此,在新版本的函数中,它会检查是否定义了间隔,如果没有,则在全局范围中定义它,以便稍后将其删除。

在手机上完成,这是我的错误格式和拼写错误的借口。