2013-02-20 6 views
0

HTML과 Javascript 인 간단한 프로젝트에서 작업하고 있습니다. 타이머에 문제가 있습니다.몇 초에 한 번만 setInterval 함수 내에서 코드를 실행하십시오.

두 개의 Date() 개체 사이의 초를 계산 중입니다. 매 2 초마다 새로운 난수를 얻고 싶습니다. 나는 setInterval을 매 100ms마다 실행하며, 2 초를 지나면 if 문 안의 코드가 실행되어야한다.

그래서 제 질문은 :
어떻게 코드가 매 100 밀리 실행하는 setInterval() 내부에있는 if 문에서 한 번만 이초 당 실행할 수 있는지 확인 할 수 있습니까?

var startTime = new Date(); 
var endTime = new Date(); 

var randomNumber = 0; 

var gameTimer = setInterval(function(){ 
    //calculate seconds; 
    var secondsPassed = Math.round((endTime - startTime)/1000); 

    if(modulo(secondsPassed,2) == 0){ 
     //when the "gate" is open this keep executing every 100 mili seconds. 
     //but i want it to execute only once every 2 seconds. 
     randomNumber = Math.floor(Math.random()*lanes.length); 
     $(lanes[randomNumber]).append(box); 
    } 

    endTime = new Date(); 
}, 100); 

var modulo = function (n, m) { 
    var remain = n % m; 
    return Math.floor(remain >= 0 ? remain : remain + m); 
}; 
+0

은 ... – Neal

+2

이유는 단지 2000보다는 100의 setInterval을 기간을 제공하지? – DiMono

+0

becuse 나는 더 빨리 실행 한 다음 2000 밀리와 endTime이 충분히 빨리 재생되지는 않을 것이라며 더 많은 것을 추가하고 싶다. – samy

답변

3

난 당신이 이중 간격 타이머를 요구 생각 : 여기

는 코드입니다. 난 당신이 여기에 무엇을 요구 아무 생각

var interval = 100, beat = 2000, ticks = 0; 
var timer = setInterval(function(){ 
    runsEvery100ms(); // ««« Code here runs every 100 ms. 
    if (ticks > 0 && ticks % beat === 0) { 
     runsEvery2000ms(); // ««« Code here runs every 2000 ms. 
     ticks = 0; 
    } 
    ticks += interval; 
}, interval); 

Demo Fiddle here.

+0

감사합니다. 나쁜 영어로 becus를 사용하여 내가하고 싶은 것을 설명하기가 매우 어려웠습니다. 그러나 당신은 그것을 이해합니다! 다시 대단히 감사합니다 :) – samy

+0

문제 없습니다. 천만에요. –

관련 문제