画像を遅延読み込みするプラグインは多数ありますが、lazySizes はレスポンシブイメージに対応、jQueryに依存しない、余計なオプションが少ないなどでおすすめです。
lazySizesの使い方
GitHub よりzipをダウンロードし、 lazysizes.min.js
を読み込みます。
<script src="js/lazysizes.min.js"></script>
CSSの記述
CSSでアニメーションを入れます。
.lazyload {
opacity: 0;
transition: opacity .8s ease-out;
}
.lazyloaded {
opacity: 1;
}
HTMLの記述
<img>
タグのclassにlazyload
を、src=""
にはダミー画像を data-src=""
に表示させる画像を設定します。
<img class="lazyload" data-src="https://placehold.jp/400x200.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==">
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
は、data URI化した1×1のgif画像です。このまま使用できます。
参考:快速ページ表示のためのblank.gifのdata URI化、最短表現や処理の重さを実際にテストしてみた | 初代編集長ブログ―安田英久 | Web担当者Forum
ダミー画像のときに高さがなくなるのを防ぐ
画像が読み込まれる前(ダミー画像)の状態は高さがないため、画像が表示されるまでの間表示が崩れたり、スクロールイベントが正常に動作しなかったりします。
「lazysizes aspectratio extension」は、指定したアスペクト比でダミー画像の高さを保ってくれるプラグインです。
GitHub からlazysizesをzipでダウンロードすると lazysizes/plugins/aspectratio/
内に入っています。
ディレクトリの中からls.aspectratio.min.js
をlazysizesの後に読み込みます。
公式:lazysizes/plugins/aspectratio at gh-pages · aFarkas/lazysizes · GitHub
アスペクト比の指定方法
幅400・高さ200の画像の場合(全て同じ意味): "400/200"
、"4/2"
、"2/1"
、"2"
、"2.0"
<img>
タグの中に下記の記述を追加します。
data-aspectratio="400/200"
img要素に width:100%
を指定します。max-width
では動作しません。
img.lazyload {
width: 100%;
}