从另一个调用函数,反之亦然

时间:2017-01-20 16:44:20

标签: javascript jquery timer

我有两个带有两个布尔变量和两个函数的定时器。第一个计时器由一个点击触发,该点击可以放置一个布尔值;一旦计时器到达某些条件,此计时器关闭设置false布尔值和另一个计时器被触发设置为第二个布尔值并调用第二个计时器。

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

我无法调用在我执行调用的函数下面声明的函数。

我在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*/
     });

1 个答案:

答案 0 :(得分: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);

});