[0001]Lazy Loadで大量の画像を含むWebページの速度改善&Swiperで画像スライド
■画像関連
一覧ページなどWEBページで個々の画像を表示する場合、一覧表示件数や画像数によってWEBページを開く速度がどんどん遅くなってしまいます。
そこでLazy Loadを利用して遅延ロードをします。ブラウザの画面領域内に存在する画像のみをロードし、画面領域外に存在する画像はロードしないことを実現するため、大幅に速度改善ができます。
画像のスライドには簡単に実現できるSwiperを利用したいと思います。
まず、https://unpkg.com/swiper/ここからswiper-bundle.min.cssとswiper-bundle.min.jsを取得し、任意の場所に配置します。
この例の場合、名前をswiper.cssとswiper.jsに変更し、それぞれ配置します。/css/swiper.css、/js/swiper.js
アローボタンを変更したいので、アローボタンの画像も配置し、swiper.cssに以下を追加します。
swiper.css
.swiper-button-prev,
.swiper-button-next {
width: 16px;
height: 16px;
margin-top: -8px;
}
.swiper-button-prev {
background: url(/images/icon/swiper-left.png) no-repeat center center / contain;
}
.swiper-button-prev::after {
content: "";
}
.swiper-button-next {
background: url(/images/icon/swiper-right.png) no-repeat center center / contain;
}
.swiper-button-next::after {
content: "";
}
次にHTML側で先ほど用意したswiper.cssを<head>内に配置します。例:<link rel="stylesheet" href="/css/swiper.css">
swiper.jsを</body>の手前に配置します。例:<script src="/js/swiper.js"></script>
swiper.jsの後にswiperのJavascriptを追加します。
<script>
var swiper = new Swiper('.swiper-container', {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
loop: true,
autoplay: {
delay: 2000,
disableOnInteraction: true
},
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true,
},
autoHeight: true,
});
</script>
スクリプトの後にLazy LoadのJavascriptを追加します。
<script src="https://cdn.jsdelivr.net/npm/lazyload@2.0.0-rc.2/lazyload.min.js"></script>
<script>
lazyload();
</script>
これだけです!!
画像スライドのswiperのオプションは色々ありますが、利用しているのは以下になります。
loop: true→スライダーの最後までいったら先頭に戻る
autoplay:delay:2000→2000なので2秒ごとに自動スライド
autoplay:disableOnInteraction:true→操作されたら自動再生をストップ
pagination→スライダーが今何番目か分かる。typeはいくつかあり
autoHeight: true→高さに応じて自動で調整
最後にHTML側です!
xxx.html
<div class="swiper-container" style="width: 200px">
<div class="swiper-wrapper">
<div class="swiper-slide"><img class="lazyload" data-src="http://www.xxx/1.jpg" alt="" width="200"></div>
<div class="swiper-slide"><img class="lazyload" data-src="http://www.xxx/2.jpg" alt="" width="200"></div>
<div class="swiper-slide"><img class="lazyload" data-src="http://www.xxx/3.jpg" alt="" width="200"></div>
<div class="swiper-slide"><img class="lazyload" data-src="http://www.xxx/4.jpg" alt="" width="200"></div>
</div>
<div class="swiper-pagination"></div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
遅延ロードのLazy Loadを利用する場合、imgタグにclass="lazyload"を追加し、src属性ではなく、data-src属性で画像パスを指定します。
それだけです!!なんとも簡単に完成です。