Help us understand the problem. What is going on with this article?

lazysizesを使った場合のJavaScript無効時の処理

More than 1 year has passed since last update.

lazysizesとは

lazysizesとは、画像やiframe要素の遅延読み込み(レイジーローディング)を簡単に実装できるようにしてくれるライブラリです。
通常、webページにアクセスするとページ上の全ての画像を一度に読み込もうとするので画像が多いと読み込みに時間がかかってしまいます。
なので、ファーストビューで表示される画像だけ読み込んで、それ以外の画像はスクロールしてきた時に読み込むようにしてページの表示速度を上げるといった技術が出てきました。
lazysizesは、それを簡単に実現させてくれるものです。

lazysizesを使った遅延読み込みの実装方法

CDNが用意されているので、今回はCDN経由での実装方法を紹介します。

ライブラリの読み込み

<script type="text/javascript" async="" src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/4.0.1/lazysizes.min.js?ver=1.0"></script>

あとは、src属性で指定しているURLをdata-srcという属性に指定してlazyloadというクラスを追加するだけです。

<img data-src="image.jpg" class="lazyload" />

基本的には、これだけで遅延読み込みできるようになります。

JavaScript無効時に画像などが表示されないので、noscript要素を使って表示できるようにする

非常に便利なレイジーローディングですが、lazysizesを使って遅延読み込みをした場合、そのままではJavaScript無効時に表示されないという現象が起こってしまいます。
lazysizesはJavaScriptライブラリで、JavaScriptが動作しないと処理ができないからです。

なので、noscript要素を使ってJavaScript無効時は通常読み込みで表示できるようにしようと思います。
noscript要素の中のコードは、JavaScriptが無効の場合のみ処理されるのでそれを利用します。

<noscript><style>.lazyload{display: none !important;}</style></noscript>

<img class="lazyload" data-src="image.jpg">
<!-- 遅延読み込みするimg要素の直後に下記noscript要素を記述するようにしてください -->
<noscript><img src="image.jpg"></noscript>

上記コードで、JavaScriptが無効の場合でも画像が表示されるようになります。
やっていることは、JavaScript無効時はimg要素を通常読み込みで読み込むようにして、遅延読み込み用のimg要素はdisplay:noneで非表示にしているだけです。(非表示にしないと要素分の領域が確保されてnoscriptタグ内で読み込まれているimg要素の位置がズレてしまう)

最後に

まぁ、JavaScriptが無効な環境なんて今時ほぼないのかもしれませんが、表示されないというのは気持ちが悪かったので対応することができて良かったです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away