>웹 프론트엔드 >CSS 튜토리얼 >JavaScript에서 `setTimeout` 또는 `setInterval` 루프를 중지하는 방법은 무엇입니까?

JavaScript에서 `setTimeout` 또는 `setInterval` 루프를 중지하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-13 16:59:10775검색

How to Stop a `setTimeout` or `setInterval` Loop in JavaScript?

setTimeout 루프 중지

제공된 코드에서 setTimeout 루프는 이미지 스프라이트의 배경 위치를 지속적으로 설정하는 데 사용됩니다. 로딩 애니메이션. 그러나 로딩이 완료된 후 루프가 중지되는 시기를 제어해야 합니다.

해결 방법은 setTimeout에서 반환된 타이머 핸들을 사용하는 것입니다. 이 핸들은 시간 제한을 중지하기 위해clearTimeout과 함께 사용할 수 있습니다.

function setBgPosition() {
    var c = 0,
        timer = 0;
    var numbers = [0, -120, -240, -360, -480, -600, -720];

    function run() {
        Ext.get('common-spinner').setStyle(
            'background-position',
            numbers[c++] + 'px 0px'
        );
        if (c >= numbers.length) {
            c = 0;
        }
        timer = setTimeout(run, 200);
    }

    timer = setTimeout(run, 200);

    return stop;

    function stop() {
        if (timer) {
            clearTimeout(timer);
            timer = 0;
        }
    }
}

이 수정된 코드는 setBgPosition 내에서 중지 기능을 정의합니다. 중지 기능은 타이머 핸들이 있는지 확인하고, 그렇다면 ClearTimeout을 사용하여 이를 지웁니다. 업데이트된 코드는 다음과 같이 사용할 수 있습니다.

var stop = setBgPosition();
// ...later, when you're ready to stop...
stop();

또는 setTimeout 대신 setInterval을 사용하여 반복 루프를 생성할 수 있습니다. 그러나 setInterval에서는 루프를 중지하려면clearInterval이 필요합니다.

function setBgPosition() {
    var c = 0;
    var numbers = [0, -120, -240, -360, -480, -600, -720];

    function run() {
        Ext.get('common-spinner').setStyle(
            'background-position',
            numbers[c++] + 'px 0px'
        );
        if (c >= numbers.length) {
            c = 0;
        }
    }

    return setInterval(run, 200);
}

이 코드는 다음과 같이 사용할 수 있습니다.

var timer = setBgPosition();
// ...later, when you're ready to stop...
clearInterval(timer);

마지막으로 setBgPosition 자체 내에서 조건을 사용하여 감지하는 것을 고려하는 것이 좋습니다. 로딩 프로세스가 완료되고 루프가 자동으로 중지됩니다.

위 내용은 JavaScript에서 `setTimeout` 또는 `setInterval` 루프를 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.