2

を使用して間隔を設定する機能がありますが、setInterval()を呼び出した後でもclearInterval()、コンソールでelse条件がまだ実行されていることがわかります。その間隔を適切にクリアするにはどうすればよいですか?

function increase(old, step, neu) {
    var i = 0;
    var delay2;

    function countUp() {
        if (i < 5) {
            old += step;
            // console.log("increase")
            $("#total-price-value").text(old + " dollors");
            $("#total-price-value").digits();
            i++;
            delay2 = setInterval(countUp, 80);
        } else {
            clearInterval(delay2);
            console.log(delay2);
        }

    }
    countUp();

}​
4

2 に答える 2

10

タイムアウトと間隔の違いについて少し混乱しているようです。タイムアウトは 1 回だけ発生します。間隔は何度も発火します。間隔を使用している場合は、おそらく 1 回だけ設定する必要があります (毎回設定することになります)。タイムアウトを使用している場合は、おそらく毎回設定したいと思うでしょう(あなたがやっているように)。

この問題を解決するには、タイムアウトに切り替えるか (おそらく最も簡単な検索/置換のみ)、または間隔を 1 回だけ設定する必要があります。

たとえば、setTimeout5 まで数えるには次のようにします。

var count = 0;
function timeoutFired() {
    count++;
    if(count < 5) {
        setTimeout(timeoutFired, 1000);
    }
}
setTimeout(timeoutFired, 1000);

タイムアウトを使用すると、カウントを停止するためにクリアする必要はありません。タイムアウトを設定しないと、再度実行できなくなります。

使用方法は次のsetIntervalとおりです。

var count = 0;
function intervalFired() {
    count++;
    if(count >= 5) {
        clearInterval(interval);
    }
}
var interval = setInterval(intervalFired, 1000);

インターバルを使用して定期的に実行しているコードを停止する場合は、 を呼び出す必要がありますclearInterval。継続したくない場合は毎回呼び出すsetIntervalのに対し、呼び出しは 1 回だけであることに注意してください。setTimeout

于 2012-05-03T04:27:20.463 に答える
2

どうやら、あなたは と間違えsetIntervalたようですsetTimeoutsetInterval囲まれた関数をミリ秒ごと に実行し、ミリ秒後に一度だけ実行します。nsetTimeoutn

「5までティック」したいと思うので、サンプルを次に示します。

function increase(old, step, neu) {
    var i = 0;

    interval = setInterval(function() {
        if (i < 5) {

            //do something at this "tick"
            console.log(i);

            i++;
        } else {
            //else, stop
            clearInterval(interval);
        }
    },80);

}

increase();
于 2012-05-03T04:32:16.797 に答える