2017-01-20 32 views
0

我有两个布尔型变量和两个函数的定时器。第一个计时器是通过一次点击触发的,它实现了一个布尔值;一旦计时器达到某些条件,此计时器关闭,将布尔值设置为false,并触发另一个计时器,将第二个布尔值设为true并调用第二个计时器。从另一个调用函数,反之亦然

一旦第二个定时器达到某些条件,定时器关闭设置第二个布尔值false,我尝试触发第一个定时器,设置第一个布尔值为true并调用第一个定时器,但它没有工作。

我不能调用在我调用函数的地方声明的函数。

我的JavaScript代码是:

var active=false; 
var activeBreak=false; 
... 
function breakDown(){ 
    if(activeBreak){ 
     ... 
     if(some conditions){ 
       active=true; 
       activeBreak=false; 
       countDown();// **This call doesn't work.Black in            jsbin** 
      } 
     } 

    } 

function countDown(){ 
      if(active){ 
       ... 
       if(someConditions){ 
        active=false; 
        activeBreak=true; 
        breakDown();// *This call works. Blue in jsbin* 
       } 
      } 
} 
... 

$("#circle").click(function(){ 
      active=true; 
      countDown(); // *This call works*/ 
    }); 
+0

你能提供一个[小提琴](https://jsfiddle.net/)? – GMaiolo

+0

也许'someConditions'永远不会发生? ..是否有任何使用js超时功能? – dev8080

+0

是的条件发生。我使用的是jsbin.com,而函数countDown对breakDown()的调用是蓝色的(active),但是函数breakDown对countDown()的调用是黑色的(没有激活),那就是发生了什么。 – user1881983

回答

0

尝试

$(document).ready(function(){ 

/* Global variables */ 
var state = 'STOPPED'; 
var timeSession = 1; 
var timeBreak = 1; 

var timeout = 0; 

function resetTimer(time) { 
    timeout = (new Date()).getTime() + (time*60*1000); 
} 

function changeState() { 

    if (state === 'SESSION') { 
    state = 'BREAK'; 
    resetTimer(timeBreak); 
    } else if (state === 'BREAK' || state === 'STOPPED') { 
    state = 'SESSION'; 
    resetTimer(timeSession); 
    } 
    $('#text').text(state); 
} 

/* Function for the countdown ****************************/ 
function countDown(){ 

    if (state !== 'STOPPED') { 
    var time = (new Date()).getTime(); 

    if (timeout <= time) { 
     changeState(); 
     return; 
    } 

    var s = Math.floor((timeout - time)/1000); 
    var m = Math.floor(s/60); 
    s = s - m*60; 

    $('#timer').text(""+((timeout - time)/1000)+" "+timeout+" "+m+":"+("0"+s).substr(-2)); 

    } 
    setTimeout(countDown, 1000); 
} 

/*****Click Break ********************/ 
$("#breakMinus").click(function(){ 
    if (timeBreak > 1) { 
    --timeBreak; 
    } 
    $("#breakContent").html(timeBreak); 
}); 

$("#breakPlus").click(function(){ 
    ++timeBreak; 
    $("#breakContent").html(timeBreak); 
}); 

/******Click Session Length****************/ 
$("#seMinus").click(function(){ 
    if (timeSession > 1) { 
    --timeSession; 
    } 
    $("#seContent").html(timeSession); 
}); 

$("#sePlus").click(function(){ 
    ++timeSession; 
    $("#seContent").html(timeSession); 
});  

/***********Click circle****************/ 
$("#circle").click(changeState); 


setTimeout(countDown, 1000); 
$('#text').text(state); 

}); 
+0

不,它不起作用 – user1881983

+0

你能解释一下你想要的行为吗? –

+0

在同一个地方有两个时钟

clock
:SESSION和BREAK。时钟SESSION首先在调用函数countDown的div中触发。一旦countDown达到00:00时钟SESSION关闭,它启动时钟BREAK禁用函数countDown并启动函数breakDown。当breakDown达到00:00时相同的oposite:再次时钟SESSION应该在禁用函数breakDown和调用countDown。这最后不会发生:在函数breakDown中,对countDown的调用不是活动的。 – user1881983

相关问题