てがろぐの画像拡大表示にPhotoSwipe v5を使う。
- 投稿内の複数画像をスワイプで切替
- 「画像クリックで閉じる」オプション
- 余計なフレームやアニメーション無し
- △ data属性で画像サイズ指定必須
- JSで自動付与対応
- △ マウスホイールで画像切替非対応
- スクリプト改変で実装
動作サンプル(稼働中のてがろぐ)
実装
基本
skin-cover.html
の<head>
内でCDNを読み込む- 又はGithubから3ファイルDLして自鯖に置く
<script src="https://cdn.jsdelivr.net/npm/photoswipe@5.3.7/dist/umd/photoswipe.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/photoswipe@5.3.7/dist/umd/photoswipe-lightbox.umd.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/photoswipe@5.3.7/dist/photoswipe.min.css" rel="stylesheet">
</body>
直前にコードを追加
<script type="text/javascript">
var lightbox = new PhotoSwipeLightbox({
gallery: '.comment',
children: 'a.imagelink',
imageClickAction: 'close',
tapAction: 'close',
bgClickAction: 'close',
showHideAnimationType: 'fade',
loop: false,
bgOpacity: 0.5,
pswpModule: PhotoSwipe
});
lightbox.init();
</script>
imageClickAction: 'close'
で画像クリックで閉じる設定。
data属性追加
- 以下を参考に
data-pswp-width
、data-pswp-height
を自動付与する処理を追加
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function () {
const galleries = document.querySelectorAll('.imagelink');
galleries.forEach((el) => {
loadImage(el.href).then(img => {
el.setAttribute('data-pswp-width', img.naturalWidth);
el.setAttribute('data-pswp-height', img.naturalHeight);
});
});
});
function loadImage(src) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => resolve(img);
img.onerror = (e) => reject(e);
img.src = src;
});
}
</script>
低スペ環境では処理完了前に画像をクリックされる場合がある模様。
マウスホイールで画像切替
dist/photoswipe.esm.js
をDLし、以下の箇所に//ホイール処理
~//end
を追加- 又は編集済JSをDL(v5.3.7)
_onWheel(e) {
e.preventDefault();
const { currSlide } = this.pswp;
let { deltaX, deltaY } = e;
//ホイール処理
if (e.wheelDelta > 0) {
pswp.prev();
} else {
pswp.next();
}
//end
if (!currSlide) {
return;
}
- 基本-2で追加したコードの
pswpModule: PhotoSwipe
を以下に変更 (パスは適宜変更)
pswpModule: () => import('./photoswipe.esm.js')
UI調整
- てがろぐ用CSSに以下を追加
.pswp__top-bar .pswp__button.pswp__button--zoom
.pswp__top-bar .pswp__button.pswp__button--close
display: none
.pswp__counter
position: fixed
right: 5%
bottom: 5%
ズーム・閉じるボタンの非表示とカウント位置調整。
参考
- photoswipe CDN by jsDelivr – A CDN for npm and GitHub
- Options | PhotoSwipe
- PhotoSwipe v5 の使い方(最低限のコードで簡単実装) – ブレインログ