作成日:2018-08-01, 更新日:2018-08-01
setInterval()とsetTimeout()
| setInterval(処理, 時間) | 指定時間ごとに処理実行(無限に繰り返す) |
|---|---|
| setTimeout(処理, 時間) | 指定時間後に処理実行(n秒後に処理実行) |
setInterval(処理, 時間)
setInterval(function(){
~ 処理A ~
}, 1000);
「処理A」が終わらなくても「1000」ミリ秒後に再度、「処理A」を実行。
→同じ処理が同時に複数実行される可能性あり→メモリ不足になる可能性あり。
setTimeout(処理, 時間)
setTimeout(function(){
~ 処理A ~
}, 1000);
「処理A」が終わったら「1000」ミリ秒後に再度、「処理A」を実行。
setTimeout()
「setInterval()」は落ちる可能性があるので、使いたくないので、setTimeout()のサンプル。
nミリ秒後に実行
var n = 1000;
function loop(){
~ 処理 ~
}
setTimeout(loop, n);
▼別の記述
var n = 1000;
setTimeout(function(){
~ 処理 ~
}, n);
nミリ秒ごとに実行
var n = 1000;
function loop(){
~ 処理 ~
setTimeout(loop, n);
}
loop();
nミリ秒ごとに実行→途中で止める(clearTimeout())
var n = 1000;
var i = 0;
var idTimer;
function loop(){
~ 処理 ~
i++;
if ( i < 10 ) {
// 10未満は再実行
idTimer = setTimeout(loop, n);
}
else {
// 10以上は終了
clearTimeout(idTimer);
}
}
loop();
開始ボタンで処理を繰り返し、停止ボタンで処理を止めたい
var idTimer = null;
var startProc = function() {
~ 処理 ~
idTimer = setTimeOut(startProc, 1000);
}
$(〇〇〇).on('click', 開始ボタン, function(){
// 開始ボタンが複数回クリックされてもOKなように。
if ( idTimer == null ) {
startProc();
}
});
$(〇〇〇).on('click', 停止ボタン, function(){
// 開始ボタンが押されていないのに停止ボタンが押されてもOKなように。
if ( idTimer != null ) {
clearTimeout(idTimer);
idTimer = null; // また開始ボタンを押してもOKなように、クリアしておく
}
});
ウィンドウのリサイズ時に何かしたい
「$(window).resize()」でウィンドウのリサイズのときに何かすることが出来るんだけど、そのまま使うとリサイズ中のときも処理が走る。
そのため「リサイズイベントが走った後、一定時間リサイズされていない」を「リサイズを完了した」と考える。
詳細は忘れた・・・なぜ、これでリサイズ完了時に実行されるのだろう?
var timer = false;
$(window).resize(function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
// windowのリサイズ完了の処理
}, 200);
});