単純なsetInterval
setInterval(function() {
// Do something every 9 seconds
}, 9000);
最初のアクションは9秒後に発生します(t=9s
)。ループに最初のアクションをすぐに実行させる(t=0
)?
setInterval
のメカニズムがDelay - Action - Delay - Action ...
ループ;の代わりに Action - Delay - Action - Delay ...
ループ。
編集:私の機能は確かにループです
setInterval(function(){
$('.test').each(function(idx){
var duration = 1000;
$(this).delay(duration*idx);
Some stuff here
});
}, 4000);
複雑にしないでおく。無名関数の代わりに名前付き関数を使用できます。それを呼び出して、間隔を設定します。
function doSomething() {
console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
必要に応じてスコープを作成します。
(function() {
function doSomething() {
console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
})();
最後に、以下はx
を作成または影響することなく機能します。
setInterval(function x() {
console.log("tick");
return x;
}(), 9000);
時々私はこのパターンを使用します...
(function me() {
// Do something every 9 seconds
setTimeout(me, 9000);
})();
何かを行うが実行されるまで待機してから、再度呼び出すまで約9秒待機するため、まったく同じではありません。しかし、これは多くの場合便利ですので、イベントキューのイベントが不必要にスタックすることはありません(ただし、実行に9秒かかるコードはありません:)
古いIEでは、me
が外部スコープにリークすることに注意してください。
setInterval()は本当にい関数です。このサニタイズバージョンを使用します。この関数はすぐに関数を呼び出し、関数パラメーターの前に数秒かかるため、実際にインライン関数定義で呼び出すのは賢明です。
function startInterval(seconds, callback) {
callback();
return setInterval(callback, seconds * 1000);
}
名前付き関数を使用して呼び出し、間隔に割り当てます。
var myFnc = function() {
// Do something every 9 seconds
};
setInterval(myFnc, 9000);
myFnc();
他のオプションは、代わりにsetTimeoutを使用することです。
var myFnc = function() {
// Do something every 9 seconds
setTimeout(myFnc, 9000);
};
myFnc();