Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/am283721/vue-my-photos
Simple lightbox component for Vue applications
https://github.com/am283721/vue-my-photos
gallery image-gallery lightbox lightbox-component lightbox-gallery lightbox-gallery-plugin vue vue-component vue2 vue3 vuejs vuejs2
Last synced: about 1 month ago
JSON representation
Simple lightbox component for Vue applications
- Host: GitHub
- URL: https://github.com/am283721/vue-my-photos
- Owner: am283721
- License: mit
- Created: 2018-09-28T17:27:53.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-01-10T10:43:38.000Z (10 months ago)
- Last Synced: 2024-09-28T18:01:26.508Z (about 2 months ago)
- Topics: gallery, image-gallery, lightbox, lightbox-component, lightbox-gallery, lightbox-gallery-plugin, vue, vue-component, vue2, vue3, vuejs, vuejs2
- Language: Vue
- Homepage:
- Size: 8.76 MB
- Stars: 54
- Watchers: 2
- Forks: 12
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Simple Image Lightbox for Vue.js
Upgraded to support Vue 3 and still 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.## Vue Compatibility
Versions >= 3.0.0 are built for Vue 3.If your project uses Vue 2, use vue-my-photos-1.1.1
## Demo
Live demo available on Codepen## Installation
### Via NPM:
```bash
npm i vue-my-photos --save
```### Via CDN:
```html```
## Setup
In your App:
```htmlimport Lightbox from "@/lightbox.vue";
// ...
export default defineComponent({
name: "VueMyPhotosDemo",
components: {
Lightbox,
},
// ...
})```
## UsageSimply initiate a lightbox component with the `lightbox` tag:
```html
```
Expose the appropriate data for the template:
```js
data() {
return {
thumbnailDir: "/.../.../",
images: imageList,
galleryFilter: "all",
currentImageName: ""
};
},
```Each thumbnail in the gallery registers a click event, passing the name of the photo:
```html
```And add the showLightbox and onLightboxClose methods to your vue page (these can be named however you like):
```js
showLightbox(imageName: string) {
this.currentImageName = imageName;
},
onLightboxClose(imageName: string) {
this.currentImageName = imageName;
},
```To update which images show within the lightbox, update the filter string like so:
```js
updateFilter(filterName) {
this.galleryFilter = filterName;
}
```### A Note On v3 Updates
Previously, the lightbox was shown by accessing the component via the $refs object and calling the show method directly:
```js
showLightbox: function(imageName) {
this.$refs.mylightbox.show(imageName);
}
```This approach can still be done (and in Vue 3 using Ref() within the setup method), however, in an effort to decouple the Lightbox Component from its parent Component, the new recommended approach is detailed above using the `currentImageName` prop. This is a reactive property that will trigger the lightbox to display whenever its value is changed. A method that listens to the `on-lightbox-close` event must also be implemented in order to reset the value of `currentImageName` (Otherwise, if the user tries to open the lightbox with the same image twice in a row, `currentImageName` won't change and the lightbox won't open).
### Properties
| Property | Type | Value |
| ------------------------------------------------ | -------- | --------------------------------------------------------------------------- |
| images (Required) | array | Array of objects with image data (example below) |
| currentImageName (Required) | string | Should initially be an empty string, then updated later to trigger lightbox |
| 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 |
| closeOnBackdropClick (Optional - Default: false) | boolean | toggle whether or not to close lightbox when clicking outside of image |### Events
| Event | Description |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| onLightboxClose(imageName: string) | Fired every time the lightbox is closed. Must implement a method to update currentImageName with the value passed by this event |
| onLightboxChange(newImage: { name: string, alt: string, filter: string, id: string } | Fired every time the user advances the lightbox to the next or previous image. |**Example of images array:**
```js
var images = [{'name':'mountains.jpg', 'alt':'The Dolomites', 'filter':'nature', 'id':'image1' },
{'name':'bird.jpg', 'alt':'It is a bird', 'filter':'animals', 'id':'image2' }];
```**Note**:
- 'name' value should include the file extension
- 'alt' is optional
- 'filter' is optional if you never pass or try to update the filter value on the lightbox component
- 'id' is optional, but useful as a key if you're displaying the images in a gallery using the v-for iterator## Recommended additional modules
disable-scroll or similar module to prevent the user from scrolling while the lightbox is visible.
vue-fontawesome if you want to replace/re-style the svg icons for left/right arrows and close icon.