$(window).on('scroll', function () {}
は、scrollするたびに連続して処理が走る
scrollが終わって、そこで初めて処理を行いたい時の書き方を探していたら見つけた。
//1
function resizeStuff() {
//何かの処理
}
//2
var TO = false;
$(window).scroll(function () {
//3
if (TO !== false) {
//setTimeoutの戻り値であるNumberハンドル値が得られる falseがint型の数値に変化する
clearTimeout(TO);
}
//4
TO = setTimeout(resizeStuff, 200);
});
1.関数を定義
2. TO
の初期値を false
に
3.リサイズが行われた時、 TO !== false
だったら TO
に予約されている処理をクリア
4. TO
に対して 200ミリ秒後
に処理を行うように設定する。
scroll
中は3と4が繰り返されて、一番最後のscroll
処理で4が実行されて終り。
if (TO) clearTimeout(TO);
↑3はこんな風にも書けたり。
setTimeout
の事をちょっと知っておかないと TOにはいったい何が起こっているんだ?
となってしまうので、コメントを書いてあげておいたほうがいいと思う。
参考
javascript resize event firing multiple times while dragging the resize handle
timer.html