2016-04-22 26 views
1

Ich werde sehr dankbar sein, wenn jemand mir hilft.Ich bin neu in JS.Ich versuche, eine Funktion so oft wie meine globale Variable is.My Problem ist die Funktion ausgeführt wird gleichzeitig. Wie kann man es abwechselnd ausführen? Hier ist mein Code:Wie kann man eine Funktion mehrmals abwechselnd in JS aufrufen?

 #general{width:400px;height:400px;margin:0 auto;} 
     .cell{width:50%;height:50%;color:black} 
     .cell:nth-of-type(1){float:left;background: #81E058} 
     .cell:nth-of-type(2){float:right;background: red} 
     .cell:nth-of-type(3){float:left;background: blue} 
     .cell:nth-of-type(4){float:right;background: yellow} 



<div id='generalwrapper'> 
    <div id='general'>     
     <div class='cell' onclick='simon(this.id)'></div> 
     <div class='cell' onclick='simon(this.id)'></div>   
     <div class='cell' onclick='simon(this.id)'></div> 
     <div class='cell' onclick='simon(this.id)'></div>      
</div> 
<div id='buttondiv'> 
    <button onclick='startGame()'>On</button> 
</div> 
</div> 

     var browser=[]; 
     var count=1; 

     function startGame(){ 
      for(var i=0;i<count;i++){ 
       browserturn(); 
      } 
      count++; 
      } 

     function browserturn(){ 
      var x=getNumber(); 
      var element=x.toString(); 
      browser.push(element); 
      var y=document.getElementById(element); 
      y.click(); 
      $(y).delay(100).fadeOut().fadeIn('slow'); 
     } 


     function getNumber(){ 
      var randomNumber=Math.floor((Math.random() * 4)+1); 
      return randomNumber; 
     } 
+0

Was meinst du mit „führt gleichzeitig“ und „abwechselnd“? Meinst du, dass fadeOut und fadeIn zur gleichen Zeit für die mehreren Anrufe passieren? – nurdyguy

+0

Wenn Sie versuchen, es so oft wie die Zahl zu flashen (auszublenden und dann zurück), dann müssen Sie dies in eine rekursive Schleife anstelle einer normalen for-Schleife ändern. Versuchen Sie das? – nurdyguy

+0

Ja, genau, divs ändern die Farben nicht nach einander, sondern zusammen. – Armine

Antwort

0

Sie sollten setTimeout begrenzen verwenden, um einen recursive Funktionsaufruf zu verzögern. Ich habe eine grundlegende rekursive Funktion unten geschrieben:

var myDiv = document.getElementById('myDiv'); 
 
var timesToRepeat = 4; 
 

 

 
function myRecursiveFunction(count) { 
 
    myDiv.innerText += " ..." + count; 
 
    count++; //increment count 
 
//this is our exit condition -- otherwise it recurs infinitely!! 
 
    if (count <= timesToRepeat) { 
 
    setTimeout(function() { 
 
//after 600ms, call our function again 
 
     myRecursiveFunction(count); 
 
    }, 600) 
 
    } 
 
} 
 
//our initial call to the function 
 
myRecursiveFunction(1);
<div id="myDiv"> 
 

 
</div>

+0

Hallo. Ich versuche, Ihren Code zu verwenden, aber es funktioniert nicht in meinem Fall, obwohl ich sehe, dass es hier perfekt läuft.Was ist falsch mit meinem Code? Können Sie mir bitte helfen? Hier ist meine Schaltfläche, um die Funktion aufzurufen. Funktion startGame (COUNT) { Zählung ++; if (count <= Zähler) { Zählung ++; setTimeout (function() { startGame (count); }, 600) \t \t} \t Limit ++; } – Armine

+0

schwer zu sagen mit nur diesem Schnipsel ... können Sie eine Geige erstellen? https://jsfiddle.net/ –

+0

Ich habe das Problem bereits gelöst, vielen Dank für Ihre Hilfe :) – Armine

1

benötigen Sie ein Intervall:

var interval; 
var limit = 1; 
var count = 0; 

ersetzen startGame dafür:

function startGame() 
    { 
      interval = setInterval(browserturn, 1000); 
      limit++; 
    } 

Das Intervall ruft Ihre Funktion withi Intervalle von 1000 Millisekunden und gibt die Steuerung an den Renderer, so dass Sie die Änderungen sehen

in browserturn können Sie inkrem ent die Zähler

 function browserturn(){ 
     var x=getNumber(); 
     var element=x.toString(); 
     browser.push(element); 
     var y=document.getElementById(element); 
     y.click(); 
     $(y).delay(100).fadeOut().fadeIn('slow'); 

     // -------------------------------------- 
     counter++; 
     if(counter < limit) 
     { 
      clearInterval(interval); 
      count = 0; 
     } 
     // -------------------------------------- 
    } 

und das Intervall löschen, wenn Zählung>

+0

Ihr Code läuft nicht gleichzeitig, aber nur Sie können die Änderungen bis zum Ende sehen –

+0

Vielen Dank für Ihre Hilfe, ich habe Ihre Änderungen verwendet, aber jetzt gehen die Änderungen endlos. Was ich brauche, ist 1 Änderung beim ersten Klick, 2 Änderungen beim zweiten Klick und so weiter. – Armine

+0

Sie müssen Counter = 0 beim ersten Mal initialisieren –

Verwandte Themen