2017-07-07 86 views
0

我在做一个时间对象,但是我在clearInterval中遇到了一些奇怪的事情,但真的是一般的函数。相关代码如下所示:clearInterval不是在wow和wow中发出奇怪的声音

var timer = { 
timerStarted: false, 

startTimer: function(){ 
    var howMuchTime = parseInt($('#timer-button-number').text()); 
    var timesUpAt = Date.now() + howMuchTime*60*1000; 
    var start = new Date().getTime(); 
    var milseccount = timesUpAt - start; 

    function sectimer(){ 
    var remaining = Math.floor(milseccount - (new Date().getTime() - 
    start)); 
    if (remaining <= 0) { 
     clearInterval(x); 
    } 
    var minutes = Math.floor((remaining % (1000*60*60))/(1000*60)); 
    var seconds = Math.floor((remaining % (1000*60))/1000); 
    //display results 
    $('#timer-button-number').text(minutes + 'm ' + seconds + 's'); 
    } 

    var x = null; 
    if (!timer.timerStarted) { 
    x = setInterval(sectimer, 100); 
    timer.timerStarted = true; 
    } else if (timer.timerStarted){ 
    clearInterval(x); 
    timer.timeStarted = false; 
    console.log(timer.timeStarted); 
    } 
} 

} 

所以点击按钮,定时器启动,timer.timeStarted交换机到真正的价值。但是当再次点击该按钮时,间隔不会被清除。 timer.timeStarted切换为false,但当再次单击该按钮时,if语句的第二部分继续执行(除clearInterval部分之外的所有部分),就好像if语句不指示间隔应该再次启动一样即使它从未真正停止过)。有人可以帮忙吗?

+1

每次'startTimer所()'被称为'x'会是null,因为你做了'var x = null' –

+0

如果你会检查'x'的值,你就会知道问题是什么。 – trincot

+0

运行它是因为得到我的x未定义。同样的事情,如果我把声明移到开头。如果我将x设置为setInterval之外的if语句x每次都变成某些东西,但clearInterval仍然不起作用,并且第二个语句每次都运行timer.timeStated值。问题仍然没有解决 –

回答

0

你归零每次运行时的变量X ...

尝试移动到开头是这样的:

x = null; 
var timer = { 
timerStarted: false, 

startTimer: function(){ 
var howMuchTime = parseInt($('#timer-button-number').text()); 
var timesUpAt = Date.now() + howMuchTime*60*1000; 
var start = new Date().getTime(); 
var milseccount = timesUpAt - start; 

function sectimer(){ 
var remaining = Math.floor(milseccount - (new Date().getTime() - 
start)); 
if (remaining <= 0) { 
    clearInterval(x); 
} 
var minutes = Math.floor((remaining % (1000*60*60))/(1000*60)); 
var seconds = Math.floor((remaining % (1000*60))/1000); 
//display results 
$('#timer-button-number').text(minutes + 'm ' + seconds + 's'); 
} 


if (!timer.timerStarted) { 
    x = setInterval(sectimer, 100); 
    timer.timerStarted = true; 
} else if (timer.timerStarted){ 
    clearInterval(x); 
    timer.timeStarted = false; 
    console.log(timer.timeStarted); 
} 
} 

} 
+0

没有真正的帮助 –