Loading...

  • Home iconHOME
  • Pen iconBLOG
  • Tag iconCODING
  • 【JavaScript】スクロールイベントを間引くthrottle関数

BLOG

【JavaScript】スクロールイベントを間引くthrottle関数

Tag iconCODING Clock icon Update icon

スクロールイベントを間引くthrottle関数

前回の記事の続きになります。

スクロールイベントを実行すると、スクロールの度に処理が高速で複数回繰り返され、その数が極端に多くなると処理負荷が非常に大きくなり、ページのスクロールがカクついたり表示が遅くなるおそれがあります

そこで、インターバルを設けて、インターバル以内のスクロールに対しては処理が実行されないような関数を作ります。

この関数はthrottle関数と呼ばれ、要するに処理を間引く働きをします。

throttle関数の作成

const throttle = function(fn,interval) {
  let lastTime = Date.now() - interval;
  return function() {
    if((lastTime + interval) < Date.now()) {
      lastTime = Date.now();
      fn();
    }
  }
}

この関数 throttle(“関数”, “インターバル”); をスクロールイベントの処理の中に入れ込みます。なお、第一引数に間引きたい関数、第二引数にインターバル(単位:ミリ秒)を設定します。

【参考サイト】
スクロールのイベントを間引くthrottle – Qiita

throttle関数の導入

間引き処理(throottle関数)あり

See the Pen
Scroll-Animation (Throttle)
by Michael (@colorpiece)
on CodePen.

インターバルは500ミリ秒=0.5秒にしています。

間引き処理(throottle関数)なし

See the Pen
Scroll-Animation
by Michael (@colorpiece)
on CodePen.

右上の座標の数字に注目して両者をスクロールしてみてください。

明らかに挙動が異なることがわかると思います。間引き処理を入れた方では、処理回数が少なくなっているため、数字の変化が飛び飛びになっているように見えます。(具体的には、スクロールしても0.5秒に一回しか処理が行われていません)

アニメーション自体に不自然さが残らないよう、インターバル値はお好みで調節してください。

おわりに

もし「同じようにやったのに上手くいかない」等の質問やスクロールアニメーション実装の依頼がありましたら、お気軽にお問い合わせフォームよりご連絡ください。