Awesome Open Source
Awesome Open Source


Greenkeeper badge 📷 VueJS responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers.


jsFiddle - image

jsFiddle - video



Recommended:, which will reflect the latest version as soon as it is published to npm. You can also browse the source of the npm package at


npm install vue-gallery


yarn add vue-gallery


  1. Add a new file named vue-gallery.client.js to your nuxt plugins folder. It is important that your filename ends in .client.js (more info on this convention, only works from Nuxt v.2.4.0).
  2. Copy paste the following content in it:
import Vue from 'vue'
import VueGallery from 'vue-gallery'

Vue.component('VGallery', VueGallery)
  1. Add it to your list of plugins in nuxt.config.js:
plugins: ['~plugins/vue-gallery.client.js']
  1. You can now use the component globally:
<v-gallery :images="images"
           @close="index = null" />


VueJS single file (ECMAScript 2015)

    <gallery :images="images" :index="index" @close="index = null"></gallery>
      v-for="(image, imageIndex) in images"
      @click="index = imageIndex"
      :style="{ backgroundImage: 'url(' + image + ')', width: '300px', height: '200px' }"

  import VueGallery from 'vue-gallery';
  export default {
    data: function () {
      return {
        images: [
        index: null

    components: {
      'gallery': VueGallery

<style scoped>
  .image {
    float: left;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center center;
    border: 1px solid #ebebeb;
    margin: 5px;

Browser (ES5)

  <script type="text/javascript" src="[email protected]/dist/vue.js"></script>
  <script type="text/javascript" src="[email protected]/js/blueimp-helper.js"></script>
  <script type="text/javascript" src="[email protected]/js/blueimp-gallery.js"></script>
  <script type="text/javascript" src="[email protected]/js/blueimp-gallery-fullscreen.js"></script>
  <script type="text/javascript" src="vue-gallery.js"></script>
  <link rel="stylesheet" type="text/css" href="[email protected]/css/blueimp-gallery.min.css">

<div id="app">
  <gallery :images="images" :index="index" @close="index = null"></gallery>
    v-for="image, imageIndex in images"
    @click="index = imageIndex"
    :style="{ backgroundImage: 'url(' + image + ')', width: '300px', height: '200px' }"

<script type="text/javascript">
  new Vue({
    el: '#app',
    data: function () {
      return {
        images: [
        index: null

    components: {
      'gallery': VueGallery


Props Type Default Description
images Array [] Urls list
index Number null Opened image index
options Object blueimp-gallery options


Name Params Description

Known Issues

1. Multiple VueGallery components in same page breaks functionalities

Fix: Give each gallery a unique id. jsFiddle Example

2. Images not oriented correctly.

It's because the image isn't in the "correct" orientation and the exif orientation data is what "fixes" the orientation when you view the images. Browsers don't fix the image orientation based on the exif data. Some browsers show it "correctly" when you open the image in a new tab by itself but don't fix it if you use the image link in a src attribute. Relevant stackoverflow.

Fix: Use the onslide callback to read the exif data and "correct" the orientation based of the exif orientation. More info on blueimp-gallery.

jsFiddle Example

Code excerpt:

<gallery :options="options" :images="images" :index="index" @close="index = null"/>
data() {
  options: {
    onslide: function(index, slide) {
      const rotation = {
        1: 'rotate(0deg)',
        3: 'rotate(180deg)',
        6: 'rotate(90deg)',
        8: 'rotate(270deg)'

    //Conditionally change rotation of image based on the image orientation data. Example jsfiddle --> Or use something like
    //But for this example, the fix has been hardcoded. 
      )[0].style = `transform: ${rotation['3']};`

Other my Vue JS plugins

Project Status Description
vue-ls npm Vue plugin for work with local storage, session storage and memory storage from Vue context
vue-popper npm VueJS popover component based on popper.js

Development Setup

# install dependencies
npm install

# build dist files
npm run build


Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]



Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]


FOSSA Status

MIT © Igor Ognichenko

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
vue (4,050
vuejs (1,070
mobile (469
nuxt (216
images (162
gallery (132
nuxtjs (120
slider (118
carousel (102
vue-component (95
touch (81

Find Open Source By Browsing 7,000 Topics Across 59 Categories