# rc-viewer **Repository Path**: hanyukai/rc-viewer ## Basic Information - **Project Name**: rc-viewer - **Description**: Image viewer component for React, supports rotation, scale, zoom and so on, based on viewer.js - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-07-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: react-extensions **Tags**: None ## README # rc-viewer Image viewer component for React, supports rotation, scale, zoom and so on, based on [viewer.js](https://github.com/fengyuanchen/viewerjs) ## [Demo](https://hyk51594176.github.io/rc-viewer/demo/demo.html) ## umd ```html ``` ## Installation Install from GitHub via NPM ```bash npm install rc-viewer ``` ## Usage ```javascript import React,{ Component } from 'react'; import RcViewer from 'rc-viewer' class Test extends Component{ render(){ const options={} return
Picture 3
} } ``` ## Keyboard support > Only available in modal mode. - `Esc`: Exit full screen or close the viewer or exit modal mode 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. ## options You may set viewer options with `props.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 the screen width is greater than 768 pixels - `3`: show the navbar only when the screen width is greater than 992 pixels - `4`: show the navbar only when the screen width is greater than 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 the screen width is greater than 768 pixels - `3`: show the title only when the screen width is greater than 992 pixels - `4`: show the title only when the screen width is greater than 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` or `Object` - Default: `true` - Options: - `0` or `false`: hide the toolbar. - `1` or `true`: show the toolbar. - `2`: show the toolbar only when the screen width is greater than 768 pixels. - `3`: show the toolbar only when the screen width is greater than 992 pixels. - `4`: show the toolbar only when the screen width is greater than 1200 pixels. - `{ key: Boolean | Number }`: show or hide the toolbar. - `{ key: String }`: customize the size of the button. - `{ key: Function }`: customize the click handler of the button. - `{ key: { show: Boolean | Number, size: String, click: Function }`: customize each property of the button. - Available keys: "zoomIn", "zoomOut", "oneToOne", "reset", "prev", "play", "next", "rotateLeft", "rotateRight", "flipHorizontal" and "flipVertical". - Available sizes: "small", "medium" (default) and "large". Specify the visibility and layout of the toolbar its buttons. For example, `toolbar: 4` equals to: ```js toolbar: { zoomIn: 4, zoomOut: 4, oneToOne: 4, reset: 4, prev: 4, play: { show: 4, size: 'large', }, next: 4, rotateLeft: 4, rotateRight: 4, flipHorizontal: 4, flipVertical: 4, } ``` ### 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. ### backdrop - Type: `Boolean` or `String` - Default: `true` Enable a modal backdrop, specify `static` for a backdrop which doesn't close the modal on click. ### loading - Type: `Boolean` - Default: `true` Indicate if show a loading spinner when load image or not. ### loop - Type: `Boolean` - Default: `true` Indicate if enable loop viewing or not. > If the current image is the last one, then the next one to view is the first one, and vice versa. ### interval - Type: `Number` - Default: `5000` The amount of time to delay between automatically cycling an image when playing. ### minWidth - Type: `Number` - Default: 200 Define the minimum width of the viewer. > Only available in inline mode (set the `inline` option to `true`). ### minHeight - Type: `Number` - Default: 100 Define the minimum height of the viewer. > Only available in inline mode (set the `inline` option to `true`). ### 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 should return a valid image URL. For example: ```html ``` ```js { url(image) { return image.src.replace('?size=160', ''); }, } ``` ### container - Type: `Element` or `String` - Default: `'body'` - An element or a valid selector for [Document.querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector) The container to put the viewer in modal mode. > Only available when the `inline` option is set to `false`. ### filter - Type: `Function` - Default: `null` Filter the images for viewing (should return `true` if the image is viewable). For example: ```js { filter(image) { return image.complete; }, } ``` ### 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. ## 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 { ready: 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.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` - 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() viewer.rotate(90); viewer.rotate(-90); ``` ### rotateTo(degree) - **degree**: - Type: `Number` Rotate the image to an absolute degree. ```js const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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 const { viewer } = this.refs.viewer.getViewer() 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. ### 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. ## 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 const { container } = this.refs.viewer.getViewer() container.addEventListener('viewed', function () { .... }, false); ``` ### 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. ## Browser support - Chrome (latest) - Firefox (latest) - Safari (latest) - Opera (latest) - Edge (latest) - Internet Explorer 9+