1

setInterval ループがあります。次のように、3500 ミリ秒に設定されています。

var loop = setInterval(function() { /*stuff*/ }, 3500);

「スタッフ」のある時点で、特定の状況が発生した場合、ループの新しい反復を強制し、3500 ミリ秒待機したくありません。そんなことがあるものか?それは継続ですか、それともプロセスを別の方法で組み立てる必要があるだけですか?

4

5 に答える 5

2

setTimeoutの代わりに使用して、匿名の自己呼び出し関数を作成してみることができますsetInterval

var i = 0;

(function() {
    // stuff
    i++;
    if (i % 2 == 0) {
        // If some condition occurs inside the function, then call itself once again
        // immediately
        arguments.callee();
    } else {
        // otherwise call itself in 3 and a half seconds
        window.setTimeout(arguments.callee, 3500);
    }
})();​ // <-- call-itself immediately to start the iteration

アップデート:

の使用に対してコメント セクションで表明された意見の相違によりarguments.callee、名前付き関数を使用して同じことを達成する方法を次に示します。

var i = 0;
var doStuff = function() {
    // stuff
    i++;
    if (i % 2 == 0) {
        // If some condition occurs inside the function, then call itself once again
        // immediately
        doStuff();
    } else {
        // otherwise call itself in 3 and a half seconds
        window.setTimeout(doStuff, 3500);
    }
};
doStuff();
于 2012-12-28T13:12:18.830 に答える
2

このようなものを使用できます...setTimeout代わりにsetInterval...

<script type="text/javascript">
    var show;
    var done = false;

    show = setTimeout(showHideForm, 3500);

    function showHideForm() {
        // Do something

        if(done) {
            clearTimeout(show);

            show = setTimeout(showHideForm, 2000);
        }
    }
</script>

clearTimeoutによって返されるハンドルを引数として取りますsetTimeout

于 2012-12-28T13:18:09.730 に答える
1

名前付き関数を使用し、必要なときに呼び出します。

var loop = setInterval(loopFunc, 3500);

function loopFunc(){
  //do something
}

function anticipate(){
  clearInterval(loop);  //Stop interval
  loopFunc();  //Call your function
  loop = setInterval(loopFunc, 3500);  //Reset the interval if you want
}
于 2012-12-28T13:19:14.327 に答える
0

私の考案した例:

var time = 3500,
    loops = 0,
    loop;

(function run(){
    var wait = time,
        dontwait = false;

    if (loops++ == 5) {
        loops = 0;
        dontwait = 1000;
    }

    console.log('Interval: ', dontwait || wait);

    return loop = setTimeout(run, dontwait || wait);
})();​

http://jsfiddle.net/NX43d/1/

基本的に、自己呼び出し関数は自己呼び出し関数にループバックし、(!)短縮変数スイッチングを使用します。気の利いた。

于 2012-12-28T13:34:41.250 に答える
0
function looper(t) {
    var loop = setInterval(function() {
        document.write(s++);
        if (mycondition) { // here is your condition
            loopagain(200); // specify the time which new loop will do
            loop = window.clearInterval(loop); // clear the first interval
            return; // exit from this function!
        }
    }, t);
}

window.onload = looper(1000); // this will have default setInterval function time ans will start at window load!

function loopagain(t) {
    looper(t);
}​

http://jsfiddle.net/tFCZP/

于 2012-12-28T13:20:28.053 に答える