2017-02-14 7 views
0

私は生成したランダム配列の数字の順番でサウンドを再生したり点灯させるボタンをプログラムしようとしています。それらを明るくするために元の色に戻すよりも明るい色です。時にはこれが機能し、ボタンの色が元の色に戻らなくなってしまい、なぜ私がそのパターンを見つけることができないのか分からない時があります。私のコードで間違っていることを誰でも見ることができますか? JQuery documentation for the .queue() functionループが終了しない時間があります

var turn = 19; 
var b = 0; 
function flash(button, light) { 
button.addClass(light).delay(500).queue(function(){button.removeClass(light);}) 
    } 

    function lightUp() { 
switch (game[b]) { 
    case 1: 
    one.play(); 
    flash($("#1"),"onelit"); 
    break; 
    case 2: 
    two.play(); 
    flash($("#2"),"twolit"); 
    break; 
    case 3: 
    three.play(); 
    flash($("#3"),"threelit"); 
    break; 
    case 4: 
    four.play(); 
    flash($("#4"),"fourlit"); 
    break; 
} 

b++; 
if (b < turn) { 
    setTimeout(lightUp, 2000); 
} 
    } 
+0

OK遅延を1回だけ実行した後、2回目に各ボタンが点灯しても元の色に戻りません。 – Keli

+0

問題は、あなたが ' ) '、[この回答](http://stackoverflow.com/a/2510255/859640)のように。ところで、あなたは本当にそのようなswitch文を使わないでください。ここにはいくつかのアイディアを与えるかもしれない[jsfiddle](https://jsfiddle.net/31bb0azk/1/)があります。 –

+0

ありがとうございます()解決しました!そのようなswitch文はちょうどclunkyですか? – Keli

答えて

1

は、コールバック関数が呼び出されたときに、「次の項目をデキューする」という機能を渡されることを示しています。コールバックの終わりにその関数を呼び出す必要があります。 (ところで: "次" のパラメータに名前を付けることが一般的です。)this answer

function flash(button, light) { 
    button.addClass(light).delay(500).queue(function(next) { 
     button.removeClass(light); 
     next(); 
    }); 
} 

感謝。

関連する問題