2011-11-18 3 views
0

자바 스크립트를 사용하여지도에서 내 속성 값에 대해 다른 색상을 재생하려고 재생 기능을 구현하려고합니다. 루프가 너무 빨리 재생되고 맵의 마지막 값만 표시되기 때문에 간단한 루프를 사용하여 기본 논리를 작성하는 것이 효과적이지 않습니다.중첩 루프에서 재생 기능 Javascript

예 :

//Hash of my Values 
var myHash = {}; 

myHash['1'] = [10,100]; 
myHash['2'] = [20,200, 30]; 
myHash['3'] = [40,300, 4, 5]; 

function startPlaying() { 
    for (item in myHash) { 
     var myValues= myHash[item]; 
     var timeOut=setTimeout(function(){ 
         animate(myValues,item); 
         },1000); 
    } 
} 

function animate(myValues,item) { 
    for(i in myValues) { 
     //calling my function for each value to play on map with different styles. 
     playMyMap(); 
    } 
} 
내가 해당 myValues ​​및 항목 (1 초 지연 항목 수에 대한) 3 회 그것은 myValues ​​반복 계속됩니다 여기 내 기능 startPlaying가 타임 아웃 기능을 발사 할 것으로 예상하고 있었다

세 항목에 대해 개별적으로.

그러나 이것은 나를 위해 작동하지 않습니다. myTimeues는 엉망이되어 setTime out 함수를 호출 할 때마다 엉망이됩니다.

아무도 나에게 아이디어를주지 못했지만 어떻게 그러한 기능을 구축 할 수 있습니까?

+0

이 폐쇄 문제입니다. – SLaks

답변

0
var timeOut=setTimeout(function(){ 
        animate(myValues,item); 
        },1000); 
} 

3 회 트리거되지만 모두 1 초 후에 트리거됩니다. 카운터를 유지하는 경우 1000*counter을 수행해야 매초마다 1 개의 애니메이션 기능을 수행해야합니다.

아래 예제는 인덱스 0에 첫 번째 항목을 변경하면 인덱스 0에서 1. 일반적으로 배열의 시작과 색인을 시작하기 때문에 multiplyer로 item을 사용, 단지 일초 시작하는 1000 * (item + 1)을한다.

이 시도 :

function startPlaying() { 
    for (item in myHash) { 
     var myValues= myHash[item]; 
     var timeOut=setTimeout(function(){ 
         animate(myValues,item); 
         },1000 * item); 
    } 
} 
+0

감사합니다. 당신이 올바른지. 그러나 모든 항목을 함께 트리거하고 개별적으로 값을 시작할 수있는 방법이있을 것이라고 생각하십니까? (즉, 항목 1,2와 3이 세 개의 개별 루프에 대해 함께 보내지고 각 항목에는 해당 항목에 대한 모든 값을 재생하는 개별 루프가 다시 있음). 나는 이것이 for 루프로 수행 될 수 없다는 것을 알고있다. 실행은 빠를 것이고, 나는 플레이하는 동안 각 아이템의 마지막 값만 얻는다). for 루프를 잠자기하려고하면 브라우저가 멈추게됩니다.) 모든 제안이나 아이디어는 정말 감사하겠습니다. –