0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Vue2】lazyload(loading="lazy")が効かない原因と解決方法

Posted at

はじめに

Vue2はもうサポートも終わってて今後使う人も増えることはないと思いますが、古いシステムでVue2を使っている人もいると思います。
そんな人のためにすこしでも力になればと思ってます。
私は1つ目の仕様見たときに宇宙猫状態になりました。絶対わからないって…

原因

1. loading="lazy"の位置が間違っている

loading="lazy"src属性のに記述する必要があります。

<!-- ❌ 間違い -->
<img src="image.jpg" loading="lazy">

<!-- ✅ 正しい -->
<img loading="lazy" src="image.jpg">

この仕様については、Vue.jsのGitHubリポジトリのissueでも議論されています:

2. width, heightが設定されていない

widthheight属性を設定しないと、画像のデフォルトサイズが0×0ピクセルになり、特に画像ギャラリーなどで予期しない読み込み動作を引き起こす可能性があります。また、レイアウトシフトを防ぐためにも、ブラウザが画像のスペースを事前に確保できるようにする必要があります。

<!-- ❌ 間違い -->
<img loading="lazy" src="image.jpg">

<!-- ✅ 正しい -->
<img loading="lazy" src="image.jpg" width="300" height="200">

<!-- ✅ インラインスタイルでも可能 -->
<img loading="lazy" src="image.jpg" style="height:200px; width:300px;">

参考: Web.dev - Browser-level image lazy loading for the web

解決方法

上記の設定を両方とも適用することで、lazyloadが正常に動作します:

<img loading="lazy" src="image.jpg" width="300" height="200" alt="説明">

注意点

上記の設定を行っても、JavaScriptなどでDOM操作を行うと効かない場合があります。
vue2ではvue-lazyloadというライブラリを使うことができるようなので、もしVue.jsのコンポーネントで画像を動的に読み込む場合は検討してみてはいいでしょうか。
※ 私はライブラリを追加で入れたくなかったため、未検証です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?