Versatile & Flexible Image Viewer Plugin - viewer.js

Versatile & Flexible Image Viewer Plugin - viewer.js
File Size: 3 MB
Views Total:
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   

Viewer is a powerful, multi-functional, mobile-friendly and highly configurable image viewer plugin used to present your favorite images in an elegant way.

Features:

  • Responsive and touch friendly.
  • Keyboard support.
  • Modal and Inline modes.
  • Allows to zoom, rotate, flip images.
  • Tons of configuration options and APIs.

Installation:

# NPM
$ npm install viewerjs --save

Basic usage:

1. Include references to viewer.css and viewer.js on the web page.

<link rel="stylesheet" href="dist/viewer.min.css">
<script src="dist/viewer.min.js"></script>

2. Or import the Viewer.js as an ES module.

import Viewer from 'viewerjs';

3. To use it as a jQuery plugin, download the jQuery Wrapper and then include the following JavaScript files on the page.

<link rel="stylesheet" href="dist/viewer.min.css">
<script src="jquery.js"></script>
<script src="dist/viewer.min.js"></script>
<script src="dist/jquery-viewer.min.js"></script>

4. Attach the image viewer plugin to a single image.

<div>
  <img id="image" src="1.jpg" alt="Image Alt">
</div>
// As a Vanilla JS plugin
const viewer = new Viewer(document.getElementById('image'), {
      // options here
});

// As a jQuery plugin
$('#image').viewer({
  // options here
});

5. Attach the image viewer plugin to a group of images.

<div>
  <ul id="images">
    <li><img src="1.jpg" alt="Alt 1"></li>
    <li><img src="2.jpg" alt="Alt 2"></li>
    <li><img src="3.jpg" alt="Alt 3"></li>
  </ul>
</div>
// As a Vanilla JS plugin
const viewer = new Viewer(document.getElementById('image'), {
      // options here
});

// As a jQuery plugin
$('#image').viewer({
  // options here
});

6. Config the image viewer with the following options.

/**
 * Enable a modal backdrop, specify `static` for a backdrop
 * which doesn't close the modal on click.
 * @type {boolean}
 */
backdrop: true,

/**
 * Show the button on the top-right of the viewer.
 * @type {boolean}
 */
button: true,

/**
 * Show the navbar.
 * @type {boolean | number}
 */
navbar: true,

/**
 * Specify the visibility and the content of the title.
 * @type {boolean | number | Function | Array}
 */
title: true,

/**
 * Show the toolbar.
 * @type {boolean | number | Object}
 */
toolbar: true,

/**
 * Custom class name(s) to add to the viewer's root element.
 * @type {string}
 */
className: '',

/**
 * Define where to put the viewer in modal mode.
 * @type {string | Element}
 */
container: 'body',

/**
 * Filter the images for viewing. Return true if the image is viewable.
 * @type {Function}
 */
filter: null,

/**
 * Enable to request fullscreen when play.
 * @type {boolean}
 */
fullscreen: true,

/**
 * Define the initial index of image for viewing.
 * @type {number}
 */
initialViewIndex: 0,

/**
 * Enable inline mode.
 * @type {boolean}
 */
inline: false,

/**
 * The amount of time to delay between automatically cycling an image when playing.
 * @type {number}
 */
interval: 5000,

/**
 * Enable keyboard support.
 * @type {boolean}
 */
keyboard: true,

/**
 * Indicate if show a loading spinner when load image or not.
 * @type {boolean}
 */
loading: true,

/**
 * Indicate if enable loop viewing or not.
 * @type {boolean}
 */
loop: true,

/**
 * Min width of the viewer in inline mode.
 * @type {number}
 */
minWidth: 200,

/**
 * Min height of the viewer in inline mode.
 * @type {number}
 */
minHeight: 100,

/**
 * Enable to move the image.
 * @type {boolean}
 */
movable: true,

/**
 * Enable to rotate the image.
 * @type {boolean}
 */
rotatable: true,

/**
 * Enable to scale the image.
 * @type {boolean}
 */
scalable: true,

/**
 * Enable to zoom the image.
 * @type {boolean}
 */
zoomable: true,

/**
 * Enable to zoom the current image by dragging on the touch screen.
 * @type {boolean}
 */
zoomOnTouch: true,

/**
 * Enable to zoom the image by wheeling mouse.
 * @type {boolean}
 */
zoomOnWheel: true,

/**
 * Enable to slide to the next or previous image by swiping on the touch screen.
 * @type {boolean}
 */
slideOnTouch: true,

/**
 * Indicate if toggle the image size between its natural size
 * and initial size when double click on the image or not.
 * @type {boolean}
 */
toggleOnDblclick: true,

/**
 * Show the tooltip with image ratio (percentage) when zoom in or zoom out.
 * @type {boolean}
 */
tooltip: true,

/**
 * Enable CSS3 Transition for some special elements.
 * @type {boolean}
 */
transition: true,

/**
 * Define the CSS `z-index` value of viewer in modal mode.
 * @type {number}
 */
zIndex: 2015,

/**
 * Define the CSS `z-index` value of viewer in inline mode.
 * @type {number}
 */
zIndexInline: 0,

/**
 * Define the ratio when zoom the image by wheeling mouse.
 * @type {number}
 */
zoomRatio: 0.1,

/**
 * Define the min ratio of the image when zoom out.
 * @type {number}
 */
minZoomRatio: 0.01,

/**
 * Define the max ratio of the image when zoom in.
 * @type {number}
 */
maxZoomRatio: 100,

/**
 * Define where to get the original image URL for viewing.
 * @type {string | Function}
 */
url: 'src',

/**
 * Event shortcuts.
 * @type {Function}
 */
ready: null,
show: null,
shown: null,
hide: null,
hidden: null,
view: null,
viewed: null,
zoom: null,
zoomed: null

6. API methods.

// show the viewer immediately or not
viewer.show(boolean);

// hide the viewer immediately or not
viewer.hide(boolean);

// view the second image
viewer.view(1);

// previous image
viewer.prev([loop=false]);

// next image
viewer.next([loop=false]);

// play the image gallery in fullscreen or not
viewer.play(boolean);

// stop the autoplay
viewer.stop();

// enter fullscreen modal mode
viewer.full();

// exit fullscreen modal mode
viewer.exit();

// show the current ratio of the image with percentage.
viewer.tooltip();

// toggle the image size between its natural size and initial size.
viewer.toggle();

// reset the plugin.
viewer.reset();

// update the plugin.
viewer.reset();

// destroy the plugin
viewer.destroy();

// move images
viewer.move(1);
viewer.move(-1, 0); // Move left
viewer.move(1, 0);  // Move right
viewer.move(0, -1); // Move up
viewer.move(0, 1);  // Move down

// Move the image to an absolute point.
// x: The left value of the image
// y: The top value of the image
viewer.moveTo(x, y)

// zoom in / out the image
viewer.zoom(0.1);

// zoom the image to a special ratio with or without tooltip
viewer.zoomTo(0); // Zoom to zero size (0%)
viewer.zoomTo(1); // Zoom to natural size (100%)
viewer.zoomTo(.5, true);
viewer.zoomTo(.5, false);

// rotate the image using CSS3 transform property
viewer.rotate(90);
viewer.rotateTo(360); // Rotate a full round

// flip the image using CSS3 transform property
viewer.scale(-1); // Flip both horizontal and vertical
viewer.scale(-1, 1); // Flip horizontal
viewer.scale(1, -1); // Flip vertical

// scale the image using CSS3 transform property
viewer.scaleX(-1); // Flip horizontal
viewer.scaleY(-1); // Flip vertical

7. Events handlers.

// Vanilla JavaScript
image.addEventListener(Event, function () {});

// jQuery
image.on(Event, function () {});

image.addEventListener('viewed', function () {
  // do something
});

image.addEventListener('ready', function () {
  // do something
});

image.addEventListener('show', function () {
  // do something
});

image.addEventListener('shown', function () {
  // do something
});

image.addEventListener('hide', function () {
  // do something
});

image.addEventListener('hidden', function () {
  // do something
});

image.addEventListener('view', function () {
  // event.detail.originalImage
  // event.detail.index
  // event.detail.image
});

image.addEventListener('viewed', function () {
  // event.detail
});

image.addEventListener('zoom', function () {
  // event.detail.originalEvent
  // event.detail.oldRatio
  // event.detail.ratio
});

image.addEventListener('zoomed', function () {
  // event.detail
});

Changelog:

v1.5.0 (2019-12-14)

  • Force reflow element in a new way to avoid side effect
  • Add a new option: slideOnTouch
  • Detect if the queried image is existing when update image list

v0.6.0 (2017-10-08)

  • Refactor in ES6.
  • Build CSS code with PostCSS.
  • Removed build event.
  • Renamed built event to ready.
  • Removed event namespace.

v0.5.1 (2016-03-11)

  • Fixed the issue of the "button" option 
  • Fixed the issue of the "$.fn.viewer.setDefault" static method

v0.5.0 (2016-01-21)

  • Add more available values to the "title", "toolbar" and "navbar" options.
  • Support to toggle the visibility of title, toolbar and navbar between different screen widths.
  • Exit fullscreen when stop playing.
  • Fixed title not generated bug.

v0.4.0 (2016-01-01)

  • Supports to zoom from event triggering point.

v0.3.1 (2015-12-28)

  • Supports to zoom from event triggering point.
  • Fix a bug of the index of viewing image.

v0.3.0 (2015-12-24)

  • Add 2 new options: "view" and "viewed"
  • Add 2 new events: "view" and "viewed"
  • Add keyboard support: stop playing when tap the Space key
  • Fix lost transition after call full method in inline mode
  • Fix incorrect tooltip after switch image quickly

v0.2.0 (2015-10-18)

  • Added one new method: "moveTo"
  • Improved the image loading and showing.

v0.1.1 (2015-10-07)

  • Fixed the issue of modal closing after zoomed in and zoomed out.

This awesome jQuery plugin is developed by fengyuanchen. For more Advanced Usages, please check the demo page or visit the official website.