JavaScript

背景画像にも対応しているLazyloadライブラリ「lazysizes」

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する場合は、Classlazyloadを持たせ、画像のパスをdata-srcに設定します。

景画像::afterlazyloadする場合は、要素にClasslazyloadを持たせます。
ビューに表示されるとClasslazyloadlazyloadedに置き換えられます。

<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

 

さいごに

imgiframeLazyloadするライブラリは色々ありますが、背景画像before,afterもLazyloadできるライブラリはあまり無いと思います。
その上、jQueryやVue.jsなども必要ないので、SEO的にもレンダリング速度的にも非常に有利になります。

管理人も自社のサイトにこのライブラリを実装しました。
今の所、何の問題も発生していません。

一度試してみてはいかがでしょうか?
今日はこの辺でー

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-JavaScript
-, , ,