51
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

scrollイベントの負荷を減らす

Last updated at Posted at 2015-10-13

scrollイベントの負荷を減らす

scrollイベントを実行すると処理回数が多くて好きではありませんでした。
いろいろ調べて感じた事、結果どうしたかを書いてみます。

setIntervalを使った処理

var outerPane = $details.find(".details-pane-outer"),
    didScroll = false;
 
$(window).scroll(function() {
    didScroll = true;
});
 
setInterval(function() {
    if ( didScroll ) {
        didScroll = false;
        // Check your page position and then
        // Load in more results
    }
}, 250);

これをすると常時監視をする感じになるので、処理的にはどうなんだろうなぁと思いました。

間引きさせて実行する

var timer = null;
$(window).on('scroll',function() {
	clearTimeout( timer );
	timer = setTimeout(function() {
		//処理内容
	}, 300 );
});

これ、うまく動くんでしょうか・・・
私がやろうとするとスクロール中のイベントが重複処理になって、すごい速さで同じ処理を行おうとしてしまいました・・・。

スクロール時にフラグをたててしまう

私が今回ついた結論です。

var flug = true;
$(window).scroll(function(){
  if(flug){
    flug = false;
    setTimeout(function(){
      // ここに処理を書く
      flug = true;
      return flug;
    }, 200);
  }
});

上記の200という数字を変えれば、遅くも早くもできます。

簡単にいうと、
スクロールしたらボタンを押して、
ボタンが上がってくるまでスクロールしても押せませんよ。

という形ですね。

もう少し細かく言うと、

  • flugtrueのときにスクロール
    1. 最初にflugfalseにしておく。
    2. 処理が250ms後に実行される。
    3. 処理が終わったらflugtrueにもどす。
  • flugfalseのときにスクロール
    1. なにも処理されない。

おそらくresizeでも同じように処理の負担を減らせるのではないでしょうか。(scrollresizeに変えるだけ)


まとめ

私はまだJavascriptの扱いが慣れていないので、これが正しいという見解ではありません。
あくまで個人的に組んでみた結果という感じです。

今回は、こういった方法をとりましたが、もっといい方法があるよ!とか、この方法おかしくない?とか、
あったら教えていただけたらうれしいです!

51
46
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?