Simple lightbox component for Vue applications

vue-my-photos

Simple Image Lightbox for Vue.js

No dependencies required!

Inspired by vue-pure-lightbox, however I needed a framework that allowed for a gallery of thumbnails as well as filtering functionality.

Installation and Setup

Via NPM:

npm i vue-my-photos --save

Then in your main.js file:

import Lightbox from 'vue-my-photos'
Vue.component('lightbox', Lightbox);

Via CDN:

<!-- In <head> -->
<meta rel="stylesheet" href="https://unpkg.com/vue-my-photos/dist/lightbox.css">
<!-- In <body>, after Vue import -->
<script src="https://unpkg.com/vue-my-photos/dist/lightbox.js"></script>

Then in your App:

<script>
    Vue.use(Lightbox)

    new Vue({
        // ...
    })
</script>

Usage

Simply initiate a lightbox component with the 'lightbox' tag and unique ref name:

<lightbox id="mylightbox"
    ref="lightbox"
    :images="images"
    :filter="galleryFilter"
    :directory="thumbnailDir"
    :timeoutDuration="5000"
></lightbox>

Each thumbnail in the gallery then registers a click event, passing the name of the photo:

@click="showLightbox(image.name)"

And add the showLightbox (or w/e name you choose) method to your vue page:

showLightbox: function(imageName) {
    this.$refs.lightbox.show(imageName);
}

To update which images show within the lightbox, update the filter string like so:

updateFilter(filterName) {
    this.galleryFilter = filterName;
}

Properties

Property Type Value
images (Required) array Array of objects with image data (example below)
filter (Optional - Default: "all") string String to filter on specific images (Ex: "nature")
directory (Optional - Default: "") string Path to location of images (Ex: "/src/assets/")
timeoutDuration (Optional - Default: 3000) integer duration in ms of key/mouse inactivity before caption disappears

Example of images array:

var images = [{'name':'mountains.jpg', 'alt':'The Dolomites', 'filter':'nature' },
              {'name':'bird.jpg', 'alt':'It is a bird', 'filter':'animals' }];

Note:

  • 'name' value should include the file extension
  • 'alt' is optional
  • 'filter' is optional if you don't pass/update the filter value on the lightbox component

GitHub