# viewerjs **Repository Path**: luoyouzhu/viewerjs ## Basic Information - **Project Name**: viewerjs - **Description**: 一款强大的图片相册jquery插件,像SNS交友网站一般都会用到点击缩略图,弹出层大图片,而且弹出层有多个控制按钮,比如放大缩小、旋转、撤回等,底部有缩略图列表可切换哦。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2020-02-20 - **Last Updated**: 2022-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Viewer.js [](https://travis-ci.org/fengyuanchen/viewerjs) [](https://www.npmjs.com/package/viewerjs) [](https://www.npmjs.com/package/viewerjs) > JavaScript image viewer. - [Website](https://fengyuanchen.github.io/viewerjs) - [jquery-viewer](https://github.com/fengyuanchen/jquery-viewer) - A jQuery plugin wrapper for Viewer.js. ## 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 42 [options](#options) - Supports 23 [methods](#methods) - Supports 9 [events](#events) - Supports modal and inline modes - Supports touch - Supports move - Supports zoom - Supports rotation - Supports scale (flip) - Supports keyboard - Cross-browser support ## Main ```text dist/ ├── viewer.css ├── viewer.min.css (compressed) ├── viewer.js (UMD) ├── viewer.min.js (UMD, compressed) ├── viewer.common.js (CommonJS, default) └── viewer.esm.js (ES Module) ``` ## Getting started ### Installation ```shell npm install viewerjs ``` In browser: ```html ``` The [cdnjs](https://github.com/cdnjs/cdnjs) provides CDN support for Viewer.js's CSS and JavaScript. You can find the links [here](https://cdnjs.com/libraries/viewerjs). ### Usage #### Syntax ```js new Viewer(element[, options]) ``` - **element** - Type: `HTMLElement` - The target image or container of images for viewing. - **options** (optional) - Type: `Object` - The options for viewing. Check out the available [options](#options). #### Example ```html



```
```js
new Viewer(image, {
url(image) {
return image.src.replace('?size=160', '');
},
});
```
### ready
- Type: `Function`
- Default: `null`
A shortcut of the `ready` event.
### show
- Type: `Function`
- Default: `null`
A shortcut of the `show` event.
### shown
- Type: `Function`
- Default: `null`
A shortcut of the `shown` event.
### hide
- Type: `Function`
- Default: `null`
A shortcut of the `hide` event.
### hidden
- Type: `Function`
- Default: `null`
A shortcut of the `hidden` event.
### view
- Type: `Function`
- Default: `null`
A shortcut of the `view` event.
### viewed
- Type: `Function`
- Default: `null`
A shortcut of the `viewed` event.
### zoom
- Type: `Function`
- Default: `null`
A shortcut of the `zoom` event.
### zoomed
- Type: `Function`
- Default: `null`
A shortcut of the `zoomed` event.
[⬆ back to top](#table-of-contents)
## Methods
All methods allow chain composition.
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
new Viewer(image, {
ready() {
// 2 methods are available here: "show" and "destroy".
},
shown() {
// 9 methods are available here: "hide", "view", "prev", "next", "play", "stop", "full", "exit" and "destroy".
},
viewed() {
// All methods are available here except "show".
this.viewer.zoomTo(1).rotateTo(180);
}
});
```
### show([immediate])
- **immediate** (optional):
- Type: `Boolean`
- Default: `false`
- Indicates if show the viewer immediately or not.
Show the viewer.
> Only available in modal mode.
### hide([immediate])
- **immediate** (optional):
- Type: `Boolean`
- Default: `false`
- Indicates if hide the viewer immediately or not.
hide the viewer.
> Only available in modal mode.
### view([index])
- **index** (optional):
- Type: `Number`
- Default: `0` (inherits from the `initialViewIndex` option)
- The index of the image for viewing
View one of the images with image's index. If the viewer is not shown, will show the viewer first.
```js
viewer.view(1); // View the second image
```
### prev([loop=false])
- **loop** (optional):
- Type: `Boolean`
- Default: `false`
- Indicate if turn to view the last one when it is the first one at present.
View the previous image.
### next([loop=false])
- **loop** (optional):
- Type: `Boolean`
- Default: `false`
- Indicate if turn to view the first one when it is the last one at present.
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.
```js
viewer.rotate(90);
viewer.rotate(-90);
```
### rotateTo(degree)
- **degree**:
- Type: `Number`
Rotate the image to an absolute degree.
```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.
```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.
```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.
```js
viewer.scaleY(-1); // Flip vertical
```
### play([fullscreen])
- **fullscreen** (optional):
- Type: `Boolean`
- Default: `false`
- Indicate if request fullscreen or not.
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.
> Used by the [`toggleOnDblclick`](#toggleOnDblclick) option.
### reset()
Reset the image to its initial state.
### update()
Update the viewer instance when the source images changed (added, removed or sorted).
> If you load images dynamically (with XMLHTTPRequest), you can use this method to add the new images to the viewer instance.
### destroy()
Destroy the viewer and remove the instance.
[⬆ back to top](#table-of-contents)
## Events
All events can access the viewer instance with `this.viewer` in its handler.
> Be careful to use these events in other component which has the same event names, e.g.: [Bootstrap](https://getbootstrap.com/)'s modal.
```js
let viewer;
image.addEventListener('viewed', function () {
console.log(this.viewer === viewer);
// > true
});
viewer = new Viewer(image);
```
### ready
This event fires when a viewer instance is ready for viewing.
> In modal mode, this event will not be triggered until you click on one of the images.
### show
This event fires when the viewer modal starts to show.
> Only available in modal mode.
### shown
This event fires when the viewer modal has shown.
> Only available in modal mode.
### hide
This event fires when the viewer modal starts to hide.
> Only available in modal mode.
### hidden
This event fires when the viewer modal has hidden.
> Only available in modal mode.
### view
- **event.detail.originalImage**:
- Type: `HTMLImageElement`
- The original image.
- **event.detail.index**:
- Type: `Number`
- The index of the original image.
- **event.detail.image**:
- Type: `HTMLImageElement`
- The current image (a clone of the original image).
This event fires when a viewer starts to show (view) an image.
### viewed
- **event.detail**: the same as the `view` event.
This event fires when a viewer has shown (viewed) an image.
### zoom
- **event.detail.originalEvent**:
- Type: `Event`
- Options: `wheel`, `touchmove`.
- **event.detail.oldRatio**:
- Type: `Number`
- The old (current) ratio of the image.
- **event.detail.ratio**:
- Type: `Number`
- The new (next) ratio of the image (`imageData.width / imageData.naturalWidth`).
This event fires when a viewer starts to zoom (in or out) an image.
### zoomed
- **event.detail**: the same as the `zoom` event.
This event fires when a viewer has zoomed (in or out) an image.
[⬆ back to top](#table-of-contents)
## No conflict
If you have to use other viewer with the same namespace, just call the `Viewer.noConflict` static method to revert to it.
```html
```
## Browser support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Opera (latest)
- Edge (latest)
- Internet Explorer 9+
## Contributing
Please read through our [contributing guidelines](.github/CONTRIBUTING.md).
## Versioning
Maintained under the [Semantic Versioning guidelines](https://semver.org/).
## License
[MIT](https://opensource.org/licenses/MIT) © [Chen Fengyuan](https://chenfengyuan.com/)
[⬆ back to top](#table-of-contents)