2017-09-23 25 views
0

私はJavaScriptの中で何らかのサイモンゲームをやろうとしています。私は既にテーブルを作っており、そのIDでセルを別のIDに変更する関数を作っています。そのため、300ミリ秒間色が変わります。私はループはjavascriptのforループのタイムアウトを管理できません

var secuencia = function(numero){ 
    for(j=0; j<numero; j++){ 
     var cel="t"+ Math.floor((Math.random() * 6) + 1); 
     console.log(cel); 
     seleccionarcelda(document.getElementById(cel)); 
    } 
} 

問題のために、それは、それはランダムなセル、その後、別のセルを点灯するはずですしたいとシーケンスのために、その後のような大きな

var seleccionarcelda = function(object){ 
    var id=object.id; 
    object.id="selected"; 
    setTimeout(function(){object.id=id;},300); 
} 

:これはコードですそれは作品のようなものですが、一度にすべての細胞を選択します。順番に行うべきではありません。どうすれば修正できますか?

答えて

1

ループインデックスを関数に渡し、それを遅延時間の乗数として使用できます。以下のような

何か:細胞のすべてがオフするので、今何が起こっている

var seleccionarcelda = function(object, index){ 
    // increment delay timer 
    var delay = (index + 1) * 300; 

    var id=object.id; 
    object.id="selected"; 
    setTimeout(function(){object.id=id;}, delay);// use variable for timer delay 
} 

var secuencia = function(numero){ 
    for(j=0; j<numero; j++){ 
     var cel="t"+ Math.floor((Math.random() * 6) + 1); 
     console.log(cel); 
     // pass j to function 
     seleccionarcelda(document.getElementById(cel), j); 
    } 
} 

は、ループは、したがって、すべてのsetTimeoutスタートをミリ秒単位で完了し、基本的に同じ時間

+0

では動作しませんされてその後、彼らは順不同になる。私は彼らのそれぞれが一つずつオンとオフを切ってもらいたい。 –

+0

何が必要なのかを理解するのに役立つか、それとも何かを完全に理解するのに十分ではない。 [mcve]を提供する – charlietfl

+0

私は、最初にハードウェアでコード化された300の遅延を設定する別のsetTimeoutが必要だと思います – charlietfl

関連する問題