やくだつブログ

lazysizes を使って背景画像を遅延読み込みする方法!(レスポンシブ対応)

lazysizes を使用してレスポンシブ対応しながら背景画像を遅延読み込み(lazyload)する方法です。

公式で用意されているプラグインとして ls.unveilhooks.js というものがありますが、これは data-bg 属性に記載された画像を style="background-image: url(...);" として展開するものなので残念ながら PC / SP で画像を出し分けるということには向いていません。

レスポンシブ対応の背景画像遅延読み込みは lazysizes 単体でとても簡単に実装可能ですので紹介します。

サンプル

<body>
  <!-- 
    ... 途中のコンテンツは省略
   -->

  <!-- 対象の要素に .lazyload を付けておく -->
  <div class="content lazyload"></div>
  
  <!-- lazysizes は読み込むだけでOK -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.1.2/lazysizes.min.js" integrity="sha256-Md1qLToewPeKjfAHU1zyPwOutccPAm5tahnaw7Osw0A=" crossorigin="anonymous"></script>
</body>
.content {
  height: 100vh;
  
  /* background-image 以外を指定しておく */
  background: 50% 50% / cover no-repeat;
}

/* メディアクエリは適宜書き換えてください。 */
@media screen and (max-width: 767px) {
  .content.lazyloaded {
    background-image: url('http://placehold.it/100?text=SP');
  }
}
@media screen and (min-width: 768px) {
  .content.lazyloaded {
    background-image: url('http://placehold.it/100?text=PC');
  }
}

これだけです。

<div class="content"> の要素に .lazyload を付与しました。

この要素が画面内に入ってくる前のタイミングで .lazyload が削除されて .lazyloaded が追加されますので、あとは .content.lazyloaded に対してメディアクエリで背景画像を出し分けるのみです。簡単!

戻る