# Viewer
> A simple jQuery image viewing plugin.
- [Homepage](http://fengyuanchen.github.io/viewer)
- [Viewer without jQuery](https://github.com/fengyuanchen/viewerjs)
## Table of contents
- [Features](#features)
- [Main](#main)
- [Getting started](#getting-started)
- [Keyboard support](#keyboard-support)
- [Options](#options)
- [Methods](#methods)
- [Events](#events)
- [No conflict](#no-conflict)
- [Browser support](#browser-support)
- [Contributing](#contributing)
- [Versioning](#versioning)
- [License](#license)
## Features
- Supports [options](#options)
- Supports [methods](#methods)
- Supports [events](#events)
- Supports touch
- Supports move
- Supports zoom
- Supports rotation
- Supports scale (flip)
- Supports keyboard
- Cross-browser support
## Main
```
dist/
├── viewer.css ( 8 KB)
├── viewer.min.css ( 7 KB)
├── viewer.js (48 KB)
└── viewer.min.js (21 KB)
```
## Getting started
### Quick start
Four quick start options are available:
- [Download the latest release](https://github.com/fengyuanchen/viewer/archive/master.zip).
- Clone the repository: `git clone https://github.com/fengyuanchen/viewer.git`.
- Install with [NPM](http://npmjs.org): `npm install imageviewer`.
- Install with [Bower](http://bower.io): `bower install imageviewer`.
### Installation
Include files:
```html
```
### Usage
Initialize with `$.fn.viewer` method.
```html
```
```js
// View one image
$('.image').viewer();
// View some images
$('.images').viewer();
```
## Keyboard support
> Only available in modal mode.
- `Esc`: Exit full screen or stop play.
- `Space`: Stop play.
- `←`: View the previous image.
- `→`: View the next image.
- `↑`: Zoom in the image.
- `↓`: Zoom out the image.
- `Ctrl + 0`: Zoom out to initial size.
- `Ctrl + 1`: Zoom in to natural size.
[⬆ back to top](#table-of-contents)
## Options
You may set viewer options with `$().viewer(options)`.
If you want to change the global default options, You may use `$.fn.viewer.setDefaults(options)`.
### inline
- Type: `Boolean`
- Default: `false`
Enable inline mode.
### button
- Type: `Boolean`
- Default: `true`
Show the button on the top-right of the viewer.
### navbar
- Type: `Boolean` or `Number`
- Default: `true`
- Options:
- `0` or `false`: hide the navbar
- `1` or `true`: show the navbar
- `2`: show the navbar only when screen width great then 768 pixels
- `3`: show the navbar only when screen width great then 992 pixels
- `4`: show the navbar only when screen width great then 1200 pixels
Specify the visibility of the navbar.
### title
- Type: `Boolean` or `Number`
- Default: `true`
- Options:
- `0` or `false`: hide the title
- `1` or `true`: show the title
- `2`: show the title only when screen width great then 768 pixels
- `3`: show the title only when screen width great then 992 pixels
- `4`: show the title only when screen width great then 1200 pixels
Specify the visibility of the title (the current image's name and dimensions).
> The name comes from the `alt` attribute of an image element or the image name parsed from URL.
### toolbar
- Type: `Boolean` or `Number`
- Default: `true`
- Options:
- `0` or `false`: hide the toolbar
- `1` or `true`: show the toolbar
- `2`: show the toolbar only when screen width great then 768 pixels
- `3`: show the toolbar only when screen width great then 992 pixels
- `4`: show the toolbar only when screen width great then 1200 pixels
Specify the visibility of the toolbar.
### tooltip
- Type: `Boolean`
- Default: `true`
Show the tooltip with image ratio (percentage) when zoom in or zoom out
### movable
- Type: `Boolean`
- Default: `true`
Enable to move the image.
### zoomable
- Type: `Boolean`
- Default: `true`
Enable to zoom the image.
### rotatable
- Type: `Boolean`
- Default: `true`
Enable to rotate the image.
### scalable
- Type: `Boolean`
- Default: `true`
Enable to scale the image.
### transition
- Type: `Boolean`
- Default: `true`
Enable CSS3 Transition for some special elements.
### fullscreen
- Type: `Boolean`
- Default: `true`
Enable to request full screen when play.
> Requires the browser supports [Full Screen API](http://caniuse.com/fullscreen).
### keyboard
- Type: `Boolean`
- Default: `true`
Enable keyboard support.
### interval
- Type: `Number`
- Default: `5000`
Define interval of each image when playing.
### zoomRatio
- Type: `Number`
- Default: `0.1`
Define the ratio when zoom the image by wheeling mouse.
### minZoomRatio
- Type: `Number`
- Default: `0.01`
Define the min ratio of the image when zoom out.
### maxZoomRatio
- Type: `Number`
- Default: `100`
Define the max ratio of the image when zoom in.
### zIndex
- Type: `Number`
- Default: `2015`
Define the CSS `z-index` value of viewer in modal mode.
### zIndexInline
- Type: `Number`
- Default: `0`
Define the CSS `z-index` value of viewer in inline mode.
### url
- Type: `String` or `Function`
- Default: `'src'`
Define where to get the original image URL for viewing.
> If it is a string, it should be one of the attributes of each image element.
> If it is a function, it will be called on each image and should return a valid image URL.
### build
- Type: `Function`
- Default: `null`
A shortcut of the "build.viewer" event.
### built
- Type: `Function`
- Default: `null`
A shortcut of the "built.viewer" event.
### show
- Type: `Function`
- Default: `null`
A shortcut of the "show.viewer" event.
### shown
- Type: `Function`
- Default: `null`
A shortcut of the "shown.viewer" event.
### hide
- Type: `Function`
- Default: `null`
A shortcut of the "hide.viewer" event.
### hidden
- Type: `Function`
- Default: `null`
A shortcut of the "hidden.viewer" event.
### view
- Type: `Function`
- Default: `null`
A shortcut of the "view.viewer" event.
### viewed
- Type: `Function`
- Default: `null`
A shortcut of the "viewed.viewer" event.
[⬆ back to top](#table-of-contents)
## Methods
As there are some **asynchronous** processes when start the viewer, you should call a method only when it is available, see the following **lifecycle**:
```js
$().viewer({
built: function () {
// 2 methods are available here: "show" and "destroy".
},
shown: function () {
// 9 methods are available here: "hide", "view", "prev", "next", "play", "stop", "full", "exit" and "destroy".
},
viewed: function () {
// All methods are available here except "show".
$(this).viewer('rotate', 90).viewer('scale', -1, -1);
}
}
```
### show()
Show the viewer.
> Only available in modal mode.
### hide()
hide the viewer.
> Only available in modal mode.
### view([index])
- **index** (optional):
- Type: `Number`
- Default: `0`
- The index of the image for viewing
View one of the images with image's index.
```js
$().viewer('view', 1); // View the second image
```
### prev()
View the previous image.
### next()
View the next image.
### move(offsetX[, offsetY])
- **offsetX**:
- Type: `Number`
- Moving size (px) in the horizontal direction
- **offsetY** (optional):
- Type: `Number`
- Moving size (px) in the vertical direction.
- If not present, its default value is `offsetX`
Move the image with relative offsets.
```js
$().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
```
### moveTo(x[, y])
- **x**:
- Type: `Number`
- The `left` value of the image
- **y** (optional):
- Type: `Number`
- The `top` value of the image
- If not present, its default value is `x`.
Move the image to an absolute point.
### zoom(ratio[, hasTooltip])
- **ratio**:
- Type: `Number`
- Zoom in: requires a positive number (ratio > 0)
- Zoom out: requires a negative number (ratio < 0)
- **hasTooltip** (optional):
- Type: `Boolean`
- Default: `false`
- Show tooltip
Zoom the image with a relative ratio
```js
$().viewer('zoom', 0.1);
$().viewer('zoom', -0.1);
```
### zoomTo(ratio[, hasTooltip])
- **ratio**:
- Type: `Number`
- Requires a positive number (ratio > 0)
- **hasTooltip** (optional):
- Type: `Boolean`
- Default: `false`
- Show tooltip
Zoom the image to an absolute ratio.
```js
$().viewer('zoomTo', 0); // Zoom to zero size (0%)
$().viewer('zoomTo', 1); // Zoom to natural size (100%)
```
### rotate(degree)
- **degree**:
- Type: `Number`
- Rotate right: requires a positive number (degree > 0)
- Rotate left: requires a negative number (degree < 0)
Rotate the image with a relative degree.
> Requires [CSS3 2D Transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform) support ([IE 9+](http://caniuse.com/transforms2d)).
```js
$().viewer('rotate', 90);
$().viewer('rotate', -90);
```
### rotateTo(degree)
- **degree**:
- Type: `Number`
Rotate the image to an absolute degree.
> Requires [CSS3 2D Transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform) support ([IE 9+](http://caniuse.com/transforms2d)).
```js
$().viewer('rotateTo', 0); // Reset to zero degree
$().viewer('rotateTo', 360); // Rotate a full round
```
### scale(scaleX[, scaleY])
- **scaleX**:
- Type: `Number`
- Default: `1`
- The scaling factor to apply on the abscissa of the image
- When equal to `1` it does nothing.
- **scaleY** (optional):
- Type: `Number`
- The scaling factor to apply on the ordinate of the image
- If not present, its default value is `scaleX`.
Scale the image.
> Requires [CSS3 2D Transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform) support ([IE 9+](http://caniuse.com/transforms2d)).
```js
$().viewer('scale', -1); // Flip both horizontal and vertical
$().viewer('scale', -1, 1); // Flip horizontal
$().viewer('scale', 1, -1); // Flip vertical
```
### scaleX(scaleX)
- **scaleX**:
- Type: `Number`
- Default: `1`
- The scaling factor to apply on the abscissa of the image
- When equal to `1` it does nothing
Scale the abscissa of the image.
> Requires [CSS3 2D Transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform) support ([IE 9+](http://caniuse.com/transforms2d)).
```js
$().viewer('scaleX', -1); // Flip horizontal
```
### scaleY(scaleY)
- **scaleY**:
- Type: `Number`
- Default: `1`
- The scaling factor to apply on the ordinate of the image
- When equal to `1` it does nothing
Scale the ordinate of the image.
> Requires [CSS3 2D Transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform) support ([IE 9+](http://caniuse.com/transforms2d)).
```js
$().viewer('scaleY', -1); // Flip vertical
```
### play()
Play the images.
### stop()
Stop play.
### full()
Enter modal mode.
> Only available in inline mode.
### exit()
Exit modal mode.
> Only available in inline mode.
### tooltip()
Show the current ratio of the image with percentage.
> Requires the `tooltip` option set to `true`.
### toggle()
Toggle the image size between its natural size and initial size.
### reset()
Reset the image to its initial state.
### update()
Update the viewer when images changed.
### destroy()
Destroy the viewer and remove the instance.
[⬆ back to top](#table-of-contents)
## Events
### build.viewer
This event fires when a viewer instance starts to build.
### built.viewer
This event fires when a viewer instance has built.
### show.viewer
This event fires when the viewer modal starts to show.
> Only available in modal mode.
### shown.viewer
This event fires when the viewer modal has shown.
> Only available in modal mode.
### hide.viewer
This event fires when the viewer modal starts to hide.
> Only available in modal mode.
### hidden.viewer
This event fires when the viewer modal has hidden.
> Only available in modal mode.
### view.viewer
This event fires when a viewer starts to show (view) an image.
### viewed.viewer
This event fires when a viewer has shown (viewed) an image.
[⬆ back to top](#table-of-contents)
## No conflict
If you have to use other plugin with the same namespace, just call the `$.fn.viewer.noConflict` method to revert to it.
```html
```
## Contributing
Please read through our [contributing guidelines](CONTRIBUTING.md).
## Browser support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Opera (latest)
- Edge (latest)
- Internet Explorer 8+
As a jQuery plugin, you also need to see the [jQuery Browser Support](http://jquery.com/browser-support/).
## Versioning
Maintained under the [Semantic Versioning guidelines](http://semver.org/).
## License
[MIT](http://opensource.org/licenses/MIT) © [Fengyuan Chen](http://chenfengyuan.com)
[⬆ back to top](#table-of-contents)