1.0.0 • Published 4 years ago

vue-image-compare2 v1.0.0

Weekly downloads
61
License
MIT
Repository
github
Last release
4 years ago

Vue Image Compare

npm npm vue2 GitHub license

Build Status David Website BCH compliance

Purpose of this fork

Updates (original repo seems dead) & new features :)

simple images loading via drag & drop files into browser, will load images locally (no upload to any server)

  • drop 2 files
  • drop 1 file on one side to change only one side of the comparison

better image comparison to see details :

  • allow click & drag
  • allow zoom
  • allow middle click to start flickering left image for seconds

You can see the updated features of this fork on : https://image-compare.netlify.app

And still check the original author website : https://marcincichocki.github.io/vue-image-compare

Installation

yarn add vue-image-compare2
# or
npm i vue-image-compare2 --save

Usage

  • register the component Globally :
import Vue from 'vue'
import imageCompare from 'vue-image-compare2'

new Vue({
    components: {
        imageCompare
    },
    data() {
        return {
            before: '/img/before.jpg',
            after: '/img/after.jpg'
        }
    }
}).$mount('#app')

or locally :

import imageCompare from 'vue-image-compare2'

export default {
   data() {
    return {
      before: '/img/before.jpg',
      after: '/img/after.jpg'
    }
  },
  components: {
    imageCompare
  }
}
  • Then you can use image-compare with a minimal init :
<div id="app">
    <image-compare :before="before" :after="after"/>
</div>

or with some optionals params, like in demo folder :

<div id="app">
    <image-compare :before="before" :after="after" full isZoomable isSwitchable isDraggable>
      <i class="fa fa-angle-left" aria-hidden="true" slot="icon-left"></i>
      <i class="fa fa-angle-right" aria-hidden="true" slot="icon-right"></i>
    </image-compare>
</div>

Props

NameTypeDefaultDescription
beforeStringundefined (required)path to the image before
afterStringundefined (required)path to the image after
fullBooleanfalsestretch images (1)
paddingObject{left: 0, right: 0}left and right padding (2)
hideAfterBooleanfalsehide the after image
zoomObject{min: 0.5, max: 2}scale image by
resetBooleanfalsereset all to original
isZoomableBooleanfalsemouse wheel to zoom in/out
isDraggableBooleanfalseallow moving the comparison
isSwitchableBooleanfalseallow drag & drop
hideHandleBooleanfalsehide vertical handle bar
labelsObject{after: '', before: ''}comparison labels

(1) : Determines if images are stretched to fill parent element. Can be used with help of CSS object-fit: cover to create full page image comparison

(2) : Set left and right "padding" in pixels, so handle can not reach edge of an image

Slots

  • icon-left - element to be placed on the left side of the handle
  • icon-right - element to be placed on the right side of the handle

Example:

<image-compare before="/img/before.jpg" after="/img/after.jpg">
    <i class="fa fa-angle-left" aria-hidden="true" slot="icon-left"></i>
    <i class="fa fa-angle-right" aria-hidden="true" slot="icon-right"></i>
</image-compare>

Events

  • @movement - when image/handle is dragged left/right

Development

To contribute or try this component :

  • clone this repo
  • install dependencies : npm install
  • start dev task : npm run dev

Thanks

  • ctf0 : for his multiple contributions :heart:
  • Netlify : awesome company that offers hosting for OSS
  • Pixabay : for the free to use images
  • Shields.io : nice looking badges to be proud of
  • Travis-ci.org : for providing free continuous deployments

License

MIT