setInterval ループがあります。次のように、3500 ミリ秒に設定されています。
var loop = setInterval(function() { /*stuff*/ }, 3500);
「スタッフ」のある時点で、特定の状況が発生した場合、ループの新しい反復を強制し、3500 ミリ秒待機したくありません。そんなことがあるものか?それは継続ですか、それともプロセスを別の方法で組み立てる必要があるだけですか?
setInterval ループがあります。次のように、3500 ミリ秒に設定されています。
var loop = setInterval(function() { /*stuff*/ }, 3500);
「スタッフ」のある時点で、特定の状況が発生した場合、ループの新しい反復を強制し、3500 ミリ秒待機したくありません。そんなことがあるものか?それは継続ですか、それともプロセスを別の方法で組み立てる必要があるだけですか?
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();
このようなものを使用できます...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
。
名前付き関数を使用し、必要なときに呼び出します。
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
}
私の考案した例:
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);
})();
基本的に、自己呼び出し関数は自己呼び出し関数にループバックし、(!)短縮変数スイッチングを使用します。気の利いた。
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);
}