実行中にSetIntervalの間隔を変更する 質問する

実行中にSetIntervalの間隔を変更する 質問する

私は、setInterval を使用して、一定回数の反復で 10 分の 1 秒ごとに文字列を操作する JavaScript 関数を作成しました。

function timer() {
    var section = document.getElementById('txt').value;
    var len = section.length;
    var rands = new Array();

    for (i=0; i<len; i++) {
        rands.push(Math.floor(Math.random()*len));
    };

    var counter = 0
    var interval = setInterval(function() {
        var letters = section.split('');
        for (j=0; j < len; j++) {
            if (counter < rands[j]) {
                letters[j] = Math.floor(Math.random()*9);
            };
        };
        document.getElementById('txt').value = letters.join('');
        counter++

        if (counter > rands.max()) {
            clearInterval(interval);
        }
    }, 100);
};

間隔を特定の数値に設定する代わりに、カウンターに基づいて、実行するたびに間隔を更新したいと思います。そのため、次の代わりに:

var interval = setInterval(function() { ... }, 100);

それは次のようになります:

var interval = setInterval(function() { ... }, 10*counter);

残念ながら、それは機能しませんでした。「10*counter」は 0 になるようです。

では、匿名関数が実行されるたびに間隔を調整するにはどうすればよいでしょうか?

ベストアンサー1

匿名関数を使用することもできます:

var counter = 10;
var myFunction = function(){
    clearInterval(interval);
    counter *= 10;
    interval = setInterval(myFunction, counter);
}
var interval = setInterval(myFunction, counter);

更新: A. Wolff の提案どおり、setTimeoutの必要性を回避するには を使用しますclearInterval

var counter = 10;
var myFunction = function() {
    counter *= 10;
    setTimeout(myFunction, counter);
}
setTimeout(myFunction, counter);

おすすめ記事