2017-01-20 3 views
0

Ich habe zwei Timer mit zwei booleschen Variablen und zwei Funktionen. Der erste Timer wird durch einen Klick ausgelöst, der einen der booleschen Werte wahrnimmt; Sobald der Timer einige Bedingungen erreicht hat, ist dieser Timer ausgeschaltet und setzt den Booleschen Wert auf "false" und ein weiterer Timer wird ausgelöst, indem er den zweiten Booleschen Wert wahr stellt und den zweiten Timer aufruft.Funktionen von einander aufrufen und umgekehrt

Sobald der zweite Timer einige Bedingungen erreicht hat, ist der Timer ausgeschaltet und setzt den zweiten Boolean False und ich versuche den ersten Timer auszulösen, der den ersten Boolean True setzt und den ersten Timer aufruft, aber es funktioniert nicht.

Ich kann nicht die Funktion aufrufen, die unter dem funcion erklärt wird, wo ich den Anruf zu tun.

Mein Code in JavaScript ist:

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

Könnten Sie [Geige] liefern (https://jsfiddle.net/)? – GMaiolo

+0

Vielleicht kommt 'someConditions' nie vor? .. Gibt es eine js timeout Funktion? – dev8080

+0

Ja, die Bedingungen treten auf. Ich benutze jsbin.com und der Aufruf von breakDown() von der Funktion countDown ist blau (aktiv), aber der Aufruf von countDown() von der Funktion breakDown ist schwarz (nicht aktiv) und das ist was passiert. – user1881983

Antwort

0

Versuchen

$(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

nicht, es funktioniert nicht – user1881983

+0

Können Sie erklären, was ist das Verhalten, das Sie wollen? –

+0

Es gibt zwei Uhren an der gleichen Stelle

clock
: SESSION und Break. Die Uhr SESSION wird zuerst mit einem Klick im div ausgelöst, der die Funktion countDown aufruft. Einmal countDown erreicht 00:00 die Uhr SESSION ist aus und es startet die Uhr BREAK sperrt die Funktion countDown und startet die Funktion breakDown. Bei breakDown erreichen 00:00 gleich die gegenüberliegende: wieder sollte SESSION auf Funktion deaktivieren breakDown und callDown aufrufen. Letzteres passiert nicht: Der Aufruf von countDown ist in der Funktion breakDown nicht aktiv. – user1881983

Verwandte Themen