2011-12-29 6 views
17

일단 특정 지점에 도달하면 타이머가 재설정되고 다시 시작되는 타이머를 만들고 싶습니다.자바 스크립트 타이머 루프

지금 당장 루프 설정이 완료되었으며 테스트로 5000ms (5 초) 후에 다시 설정하려고합니다. 그러나 카운터는 모든 헤이 와이어로 진행됩니다. 여기

WIP 데모 : http://jsfiddle.net/stursby/wUHA3/ 대신의 setTimeout의

+1

내가 데모를 클릭하기 전에 브라우저를 충돌합니다있다? ': P' –

+0

카운터가 파이어 폭스에서 리셋됩니다 ... –

+0

하하 아니, 무한 루프가 아닙니다. 현재 타이머 값으로 스팬의 텍스트를 업데이트 중입니다 ... 그래서 엉망이되는 유일한 것입니다. – stursby

답변

43

, setInterval을 사용을 고려하십시오. 간격을 지울 때까지 자동으로 반복됩니다.

setInterval(myMethod, 5000); 

function myMethod() 
{ 
    //this will repeat every 5 seconds 
    //you can reset counter here 
} 
+1

나는 그 이유를 설명하는 데 'var diff = - 시간; '그 라인에 대한 필요가 없습니다. 그는 window.setTimeout (instance, (100-diff)); 대신'window.setTimeout (instance, 100);을 수행해야합니다. 그리고 그의 문제는 해결되었습니다. – Chad

+0

답변을 올바른 것으로 게시 할 수 있습니다. 그런 다음 OP는 해당 방법이 전체 프로그램에 적합한 지 여부를 결정할 수 있습니다. 이와 같은 경우에는 setInterval이 일반적으로 적합하지만 코드는 문제를 직접 해결합니다. – keyboardP

+0

좋은 아이디어. – Chad

5

나는 당신이 아마 setInterval 대신 setTimeout의를 사용해야한다는 keyboardP에 동의합니다. 그러나 원래의 질문에 답하기 위해 반복 논리로 인해 타이머에 문제가있는 이유가 있습니다. 사용하지 마십시오 : 당신은 시도하고 (난 당신이 diff와 함께 일을하려고 한 것입니다 가정) 실행 시간에 대한 계정 필요가 없습니다

var diff = (new Date().getTime() - start) - time; 
window.setTimeout(instance, (100 - diff)); 

.

setTimeout(instance, 100); 

그리고 당신은 this jsFiddle에서 볼 수있는 문제가 해결 될 : 그냥 무시하고 사용하는 것입니다 가정합니다.

+0

+1 (놀람 : D) OP의 원본 부호를 고치기를 위해. – keyboardP

+0

에는 100 대신 1만큼 증가시킬 수있는 쉬운 방법이 있습니까? 예를 들어 2.1 초가 2100이고 타이머에 2154 초 또는 2154와 같은 소수 자릿수를 얻을 수있는 방법이 있습니까? – stursby

+0

정확히 정확도는 밀리 초가되지 않습니다. 브라우저는 시간 초과/간격을 다르게 평가합니다. 평균 13ms마다 타임 아웃이 평가됩니다. 그래서 브라우저에 따라 얻을 수있는만큼 구체적입니다. – Chad