setInterval과 clearInterval을 사용하는 방법?


138
function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

안녕 모두

반복 해서 호출 하는 루프 를 만들지 않고 drawAll()한 번만 호출하고 싶습니다. 재귀 적 방법을 사용해야 합니까 , 아니면 사용해야 합니까?drawAllclearInterval

또한 사용하도록 알려주십시오 clearInterval. 감사 :)

답변:


210

setInterval반복 타이머를 설정합니다 . clearInterval발사를 멈추기 위해 전달할 수있는 핸들을 반환합니다 .

var handle = setInterval(drawAll, 20);

// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

브라우저에서 핸들은 같지 않은 숫자 여야합니다 0. 따라서 0"타이머 설정 안 함"에 편리한 플래그 값을 만듭니다. (다른 플랫폼은 다른 값을 반환 할 수 있습니다. 예를 들어 NodeJS의 타이머 함수는 객체를 반환합니다.)

에 기능 예약하려면 한 번 불을 사용하는 setTimeout대신. 계속 발사되지 않습니다. ( clearTimeout해당하는 경우 한 번 발사하기 전에 취소 할 수있는 핸들도 반환합니다 .)

setTimeout(drawAll, 20);

29

clearInterval 은 하나의 옵션입니다.

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec 
function doStuff() {
  alert('this is a 2 second warning');
  clearInterval(interval);
}

7
함께 문자열을 사용하지 마십시오 setInterval또는 setTimeout.
TJ Crowder

1
doStuff () 주위의 따옴표를 제거해야한다는 것을 의미합니까?
Joshua-Pendo

9
그렇습니다, 따옴표와 괄호. 간단히 : setInterval(doStuff);. 에 문자열을 전달하는 setInterval것은 암시 적 호출 eval입니다. 대신 함수 참조 를 전달하는 것이 가장 좋습니다.
TJ Crowder

1
아, 글쎄요, 공감대는 아마 공평합니다. 나는 옳지 않은 예를 보여주었습니다. 엄지 손가락! :)
Joshua-Pendo

10

setTimeout(drawAll, 20)대신 사용하십시오 . 함수를 한 번만 실행합니다.


고마워하지만 setTimeout은 각 지점에서 루프를 마무리하고 있습니다. 다른 접근법과 그 작동 방식을 잘 사용합니다. (drawAll, 20); 만약 (x == 202) {x = 400; 스피너(); } 휴식; }}
Raj

그것은 문제가 아니었다
Nino Škopac

8

저는 전자와 각도를 사용했고

제 경우 setInterval에는 Nodejs 타이머 객체를 반환합니다. 내가 전화했을 때 clearInterval(timerobject)작동하지 않았습니다.

먼저 ID를 가져 와서 clearInterval을 호출해야했습니다.

clearInterval(timerobject._id)

나는 이것으로 많은 시간을 보냈다. 도움이 되었기를 바랍니다.


5

참고 – 간격을 설정하고 지우는 별도의 기능을 사용하려면 간격 변수에 '상대적'또는 '한 수준 위'범위에서 모든 변수에 액세스 할 수 있어야합니다.

var interval = null;    

function startStuff(func, time) {
    interval = setInterval(func, time);
}

function stopStuff() {
    clearInterval(interval);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.