A simple image / (YouTube) video lightbox component for Vue.js 2. Based on vue-image-lightbox.
Click on the screenshot above for a demo.
FeaturesYou know the drill:
npm install vue-it-bigger # or yarn add vue-it-biggerUsage
You can view App.vue or the demo for an usage example.
In the <script>
section of your component import it:
import LightBox from 'vue-it-bigger' import('vue-it-bigger/dist/vue-it-bigger.min.css') // when using webpack
Add it to the list of used components:
export default { components: { LightBox, }, }
And use it in the <template>
section:
<LightBox :media="media"></LightBox>
The media
prop has the following structure:
[ { // For an image type: 'image', // Can be omitted for image thumb: 'http://example.com/thumb.jpg', src: 'http://example.com/image.jpg', caption: 'Caption to display. HTML <b>enabled</b>', // Optional srcset: '...' // Optional for displaying responsive images }, { // For a YouTube video type: 'youtube', thumb: 'https://img.youtube.com/vi/WsptdUFthWI/hqdefault.jpg', id: 'WsptdUFthWI', caption: 'HTML <b>enabled</b> caption to display' // Optional }, { // For a video that can be played in the <video> tag type: 'video', thumb: 'https://s3-us-west-1.amazonaws.com/powr/defaults/image-slider2.jpg', sources: [ { src: 'https://www.w3schools.com/html/mov_bbb.mp4', type: 'video/mp4' } ], caption: '<h4>Monsters Inc.</h4>', width: 800, // Required height: 600, // Required autoplay: true // Optional: Autoplay video when the lightbox opens } ]Using it with NuxtJs
Create a file named lightbox.js
under the plugins
directory with following contents:
import Vue from 'vue' import LightBox from 'vue-it-bigger' import('vue-it-bigger/dist/vue-it-bigger.min.css') const plugin = { install() { Vue.component('LightBox', LightBox) }, } Vue.use(plugin)
Add the plugin in nuxt.config.js
:
plugins: [ { src: '~/plugins/lightbox.js', ssr: false } ]
Use it in any of your components:
<no-ssr placeholder="Loading..."> <!-- this component will only be rendered on client-side --> <LightBox :media="lightBoxMedia" ></LightBox> </no-ssr>Options Properties name type default description media Array required Media array to display showLightBox Boolean true Whether to show lightbox or not at the beginning startAt Number 0 Index of the image that you want to start at nThumbs Number 7 Number of thumbnail images showThumbs Boolean true Whether to show thumbnails or not autoPlay Boolean false Move to next image automatically autoPlayTime Number 3000 (ms) Time to stop at an image before move on to next image interfaceHideTime Number 3000 (ms) Time after which the interface is hidden showCaption Boolean false Whether to show caption or not disableScroll Boolean true set to `true` to avoid scrolling views behind lightbox lengthToLoadMore Number 0 Minimum length unto end to emit load more event closable Boolean true Display the close button at the right top corner or not. ESC clicking-close will also be disabled if closable is set to false. closeText String Close (Esc) Text for the close button previousText String Previous Text for the previous image button nextText String Next Text for the next image button Methods name arguments description nextImage () Move to next image previousImage () Move to previous image closeLightBox () Close lightbox showImage (index) Show the image at index Slots close
The content of the close button.
footerThe content of the footer under the image.
Slot props name type description current integer Number of the current image displayed total integer Number of images previousThe previous button on the main image.
nextThe next button on the main image.
customCaptionThe caption of the current image.
Slot props name type description currentMedia Object The currently displayed object from the media arrayUsage example:
<LightBox ref="customCaptionLightbox" :media="media" :show-caption="true" > <template v-slot:customCaption="slotProps"> {{ slotProps.currentMedia.caption }}<br> There could be some description here. </template> </LightBox>videoIcon
The Icon used for videos
EventsonOpened
: Emit when the lightbox is opened.onClosed
: Emit when the lightbox is closed.onLastIndex
: Emit when the current image is the last one of the list.onFirstIndex
: Emit when the current image is the first one of the list.onStartIndex
: Emit when the current image is at the startAt
index (specified in the properties).onLoad
: Emit when there are lengthToLoadMore
images left in the array (specified in the properties). For example, if lengthToLoadMore = 2
and there are 7 images in your array, when you reach index 4 (which means there are 2 images left which are not discovered yet), this event will be emitted. After that, if the image array are updated and there are totally 15 images, the event will be emitted at index 12.Clone the repository, cd into it and run:
npm run dev
yarn dev
After you add or modify something make sure the tests still pass:
npm run test
yarn test
Release
yarn dev
This project is licensed under the the Apache License, Version 2.0.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4