目次
lazysizesとは
lazysizesは、Javascript単体で画像にLazyloadを行うライブラリです。
jQueryやVue.jsなども必要ありません。
ビューで検知した要素にClassを設定することで、背景画像や::befor,::afterにもLazyLoadを行う事が可能です。
【動画サイズ:112KB】
環境
この記事は、以下の管理人の検証環境にて記事にしています。
lazysizes | 5.2.2 |
ライブラリの取得
ライブラリを取得するには、npm, CDNのどれか一つを使用します。
npm
npm install lazysizes --save
CDN
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lazysizes-umd.min.js" async></script>
gitリポジトリは以下から取得できます。
導入手順
管理人が行った、動作確認サンプルを実装するために、以下の手順でソースコードを導入していきます。
このサンプルでは、画像、背景画像、::after画像にLazyloadを実装します。
step
1ライブラリの取り込み
まずライブラリを呼び出す為に、以下の2通りのケースで呼び出します。
ES6等の場合
import 'lazysizes'; import 'lazysizes/plugins/parent-fit/ls.parent-fit';
UMDの場合
設定なし
step
2画像を設置
img
タグをlazyloadする場合は、Class
でlazyloadを持たせ、画像のパスをdata-src
に設定します。
背景画像や::afterをlazyloadする場合は、要素にClass
でlazyloadを持たせます。
ビューに表示されるとClass
のlazyloadがlazyloadedに置き換えられます。
<div style="height:500px"></div> <div style="height:500px"></div> <img class="lazyload" data-src="https://lazesoftware.com/tool/dummyimg/generate?type=png&width=600&height=600&bgColor=%23999999&bgPattern=none&bgType=upload&bgImageId=&bgRotate=&bgFlip=none&bgFilter=none&textColor=%23ffffff&fontSize=&verticalAlign=middle&textAlign=center&text=ダミー"> <div style="height:500px"></div> <div style="height:500px"></div> <img class="lazyload" data-src="https://lazesoftware.com/tool/dummyimg/generate?type=png&width=600&height=600&bgColor=%23999999&bgPattern=none&bgType=upload&bgImageId=&bgRotate=&bgFlip=none&bgFilter=none&textColor=%23ffffff&fontSize=&verticalAlign=middle&textAlign=center&text=ダミー"> <div style="height:500px"></div> <div style="height:500px"></div> <div class="bg lazyload"></div> <div style="height:500px"></div> <div style="height:500px"></div> <div class="bg-after lazyload"></div> <div style="height:500px"></div> <div style="height:500px"></div>
step
3背景画像や::afterのCSS
ビューに表示されてClassがlazyloadedに置き換えられた時に、backgroud画像を呼び出します。
/* 背景画像用 */ .bg.lazyloaded { background: url(https://lazesoftware.com/tool/dummyimg/generate?type=png&width=600&height=600&bgColor=%23999999&bgPattern=none&bgType=upload&bgImageId=&bgRotate=&bgFlip=none&bgFilter=none&textColor=%23ffffff&fontSize=&verticalAlign=middle&textAlign=center&text=背景画像) center center / cover no-repeat; } /* ::after画像用 */ div.bg-after.lazyloaded::after { content: ""; background: url(https://lazesoftware.com/tool/dummyimg/generate?type=png&width=600&height=600&bgColor=%23999999&bgPattern=none&bgType=upload&bgImageId=&bgRotate=&bgFlip=none&bgFilter=none&textColor=%23ffffff&fontSize=&verticalAlign=middle&textAlign=center&text=背景画像::after) center center / cover no-repeat; display: inline-block; width: 100%; height: 100%; background-size: contain; vertical-align: middle; }
サンプル
今回のソースを実際に触って確認できるようにデモを用意しました。
See the Pen LazySize サンプル by カバの樹 (@kabanoki) on CodePen.dark
さいごに
imgやiframeをLazyloadするライブラリは色々ありますが、背景画像やbefore,afterもLazyloadできるライブラリはあまり無いと思います。
その上、jQueryやVue.jsなども必要ないので、SEO的にもレンダリング速度的にも非常に有利になります。
管理人も自社のサイトにこのライブラリを実装しました。
今の所、何の問題も発生していません。
一度試してみてはいかがでしょうか?
今日はこの辺でー