
【脱jQuery】シンプルなlightbox系スクリプト”Luminous”をwebpackで使う方法。ギャラリーも。
こんにちは。上間ウェブ店の上間です。
今回は最近よく使うlightbox系のスクリプト、”Luminous”をwebpackで使う方法の紹介です。
シンプルでサクッと実装できます。
目次
インストール
まずはnpmでとってきます。devDependenciesではなくdependenciesに入れましょう。
yarn add luminous-lightbox
読み込み
webpackを使用している前提です。luminous用のjsファイルを作成し、頭の方でスクリプトとcssを読み込みます。
// lumiunous.js
import { Luminous, LuminousGallery } from 'luminous-lightbox'
import 'luminous-lightbox/dist/luminous-basic.css'
このコードでは、LuminousとLuminousGalleryを2つ読み込んでますが、どちらかしか使わない場合は1つで大丈夫です。
下記で単体とギャラリーの使い方ではそれぞれ書き方を変えてるので参考にしてください。
単体(ギャラリー無し)で使う方法
ギャラリーにすると矢印が出現してコントロールが可能になります。
<a class="luminous" href="http://placehold.jp/300x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
// luminous.js
import { Luminous } from 'luminous-lightbox'
import 'luminous-lightbox/dist/luminous-basic.css'
const trigger = document.querySelector('.luminous')
const luminous = () => {
new Luminous(trigger)
}
export default luminous
// index.js
import luminous from './luminous.js'
luminous()
これだけです。めちゃくちゃシンプルですね。
ただこれだと1枚しか使えないんです。複数枚を単体で使おうとすると最初の1枚しか効かないんですね。
複数枚を単体で使う場合は下記です。これで、.luminousクラス内の画像は1枚ずつlightboxします。ギャラリー無しです。
<a class="luminous" href="http://placehold.jp/300x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
<a class="luminous" href="http://placehold.jp/400x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
<a class="luminous" href="http://placehold.jp/500x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
// luminous.js
import { Luminous } from 'luminous-lightbox'
import 'luminous-lightbox/dist/luminous-basic.css'
const trigger = document.querySelectorAll('.luminous')
const luminous = () => {
Array.from(trigger).forEach((e) => {
new Luminous(e)
})
}
export default luminous
ギャラリーで使う方法
<a class="luminous" href="http://placehold.jp/300x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
<a class="luminous" href="http://placehold.jp/400x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
<a class="luminous" href="http://placehold.jp/500x150.png">
<img src="http://placehold.jp/150x50.png">
</a>
import { LuminousGallery } from 'luminous-lightbox'
import 'luminous-lightbox/dist/luminous-basic.css'
const trigger = document.querySelectorAll('.luminous')
const luminous = () => {
new LuminousGallery(trigger)
}
export default luminous
これも単純ですね。querySelector を querySelectorAll に、 new Luminous を new LuminousGallery とするだけです。
注意点
レスポンシブ対応が中途半端なんですよね。。
スマホ時に画面より画像が大きいとはみ出します。
あと、z-indexが書かれてなくて、閉じるボタンが隠れがち。
なので僕はいつもこれを追加しています。
// luminous.styl
.lum-lightbox
z-index 999
.lum-lightbox-position-helper
img
width 100%
height 100%
object-fit contain
font-family 'object-fit: contain;'
object-fit ですね。こいつの登場でコーディングがすごく楽になりました。今度記事にしたいと思います。
オプションなど
githubに載ってますが英語なので、訳してくれているサイトを紹介します。
lightboxの超軽量版!jQuery不要の画像拡大スクリプト「Luminous」の基本的な使い方とオプションの説明、複数画像への適用方法
https://wemo.tech/1169
僕の説明より詳しく量も豊富なので、そっちみた方がわかりやすいかもしれませんね笑
以上です。