Lazy Load(画像の遅延読み込み)を実装する方法

作成日:2018-03-26, 更新日:2018-04-11

基本

「ページを開いたタイミングで画像を読み込む」じゃなくて、「画像が画面に表示されたら読み込む」ってヤツ。

「Lazy Load」ってjavascriptのライブラリがあるので、それを使う。
使うライブラリはGitHubにいるのでダウンロードする。
使うのは「lazyload.min.js」。「lazyload.js」でもOK。

Lazy Load
GitHub:tuupola/jquery_lazyload
※2018/03/26時点で「Version: 2.0.0-beta.2」。

ver1とver2では記述が異なるので注意が必要。
※ver1だと画像を徐々に表示とかあるけど、ver2は無いっぽい。今後実装さるかもしれない。

サンプルソース

・「lazyload.min.js(or lazyload.js)」は読み込み必須(※jqueryもいるはず)
・必要に応じて「$(function(){ 〇〇〇 });」で囲んでやる。

基本

・画像のクラス名を「lazyload」にする。
・「data-src」に画像のPATHを記載。
・「src」は不要。
・「lazyload()」を実行する。

<img data-src="img/hoge1.jpg" class="lazyload">
<img data-src="img/hoge2.jpg" class="lazyload">
<img data-src="img/hoge3.jpg" class="lazyload">
・・・
<script>
  lazyload();
</script>

読み込まれるまでの間の画像(サムネイルやローディング画像)を表示させたい

・「src」に低画像のサムネイルやローディング画像のPATHを記載。

<img data-src="img/hoge1.jpg" src="img/thumbnail.jpg" class="lazyload">
<img data-src="img/hoge2.jpg" src="img/thumbnail.jpg" class="lazyload">
<img data-src="img/hoge3.jpg" src="img/thumbnail.jpg" class="lazyload">
・・・
<script>
  lazyload();
</script>

クラス名を指定したい

・「document.querySelectorAll()」で指定可能

<img data-src="img/hoge1.jpg" src="img/thumbnail.jpg" class="zebra">
<img data-src="img/hoge2.jpg" src="img/thumbnail.jpg" class="zebra">
<img data-src="img/hoge3.jpg" src="img/thumbnail.jpg" class="zebra">
・・・
<script>
  let images = document.querySelectorAll('.zebra');
  lazyload(images);
</script>

※▲サムネイルありの例。

ページの他のすべての要素がロードされてからnミリ秒後にトリガー

・「setTimeout()」を使う(下記は500ミリ秒後)

<img data-src="img/hoge1.jpg" class="lazyload">
<img data-src="img/hoge2.jpg" class="lazyload">
<img data-src="img/hoge3.jpg" class="lazyload">
・・・
<script>
  window.addEventListener("load", function(event) {
    let timeout = setTimeout(function() {
      lazyload();
    }, 500); 
  });
</script>