2017-02-14 11 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 지연 기능을 한 번 실행 한 다음 두 번째로 각 버튼이 켜지면 원래 색상으로 돌아 가지 않습니다. – Keli

+0

문제는 '다음 (next))', [이 답변] (http://stackoverflow.com/a/2510255/859640)처럼. BTW, 당신은 정말 같은 switch 문을 사용하지 말아야합니다. 몇 가지 아이디어를 줄 수있는 [jsfiddle] (https://jsfiddle.net/31bb0azk/1/)이 있습니다. –

+0

다음 주셔서 감사합니다() 해결했습니다! 스위치 진술은 그냥 clunky 같은가? – Keli

답변

1

콜백 함수가 호출 될 때 "다음 항목을 큐에서 제거 할 것이다"고 함수를 전달 보여줍니다. 콜백이 끝날 때이 함수를 호출해야합니다. (BTW : "다음"매개 변수의 이름을 지정하는 것이 일반적입니다.) this answer

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

감사합니다.