react-zoom-pan-pinch
React library to support easy zoom, pan, pinch on various html dom elements like images and divs.
Super fast and light react npm package for zooming, panning and pinching html elements in easy way.
Features
- :rocket: Fast and easy to use
- :factory: Light, without external dependencies
- :gem: Mobile gestures, touchpad gestures and desktop mouse events support
- :gift: Powerful context usage, which gives you a lot of freedom
- :wrench: Highly customizable
- :crown: Animations and many options
Install
npm install --save react-zoom-pan-pinch
or
yarn add react-zoom-pan-pinch
Usage
import React, { Component } from "react";
import { TransformWrapper, TransformComponent } from "react-zoom-pan-pinch";
class Example extends Component {
render() {
return (
<TransformWrapper>
<TransformComponent>
<img src="image.jpg" alt="test" />
</TransformComponent>
</TransformWrapper>
);
}
}
or
import React, { Component } from "react";
import { TransformWrapper, TransformComponent } from "react-zoom-pan-pinch";
class Example extends Component {
render() {
return (
<TransformWrapper
defaultScale={1}
defaultPositionX={200}
defaultPositionY={100}
>
{({ zoomIn, zoomOut, resetTransform, ...rest }) => (
<React.Fragment>
<div className="tools">
<button onClick={zoomIn}>+</button>
<button onClick={zoomOut}>-</button>
<button onClick={resetTransform}>x</button>
</div>
<TransformComponent>
<img src="image.jpg" alt="test" />
<div>Example text</div>
</TransformComponent>
</React.Fragment>
)}
</TransformWrapper>
);
}
}
| Props |
Default |
Type |
| scale |
1 |
number |
| positionX |
auto |
number |
| positionY |
auto |
number |
| defaultPositionX |
null |
number |
| defaultPositionY |
null |
number |
| defaultScale |
null |
number |
| options |
{...} |
object |
| wheel |
{...} |
object |
| pan |
{...} |
object |
| pinch |
{...} |
object |
| zoomIn |
{...} |
object |
| zoomOut |
{...} |
object |
| doubleClick |
{...} |
object |
| reset |
{...} |
object |
| scalePadding |
{...} |
object |
| onWheelStart |
null |
Function |
| onWheel |
null |
Function |
| onWheelStop |
null |
Function |
| onPanningStart |
null |
Function |
| onPanning |
null |
Function |
| onPanningStop |
null |
Function |
| onPinchingStart |
null |
Function |
| onPinching |
null |
Function |
| onPinchingStop |
null |
Function |
| onZoomChange |
null |
Function |
| enablePadding |
true |
Boolean |
| enablePanPadding |
true |
Boolean |
Options prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| transformEnabled |
true |
boolean |
| minPositionX |
null |
null, number |
| maxPositionX |
null |
null, number |
| minPositionY |
null |
null, number |
| maxPositionY |
null |
null, number |
| minScale |
1 |
number |
| maxScale |
8 |
number |
| limitToBounds |
true |
boolean |
| limitToWrapper |
false |
boolean |
| centerContent |
true |
boolean |
scalePadding prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| size |
0.45 |
number |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
Wheel prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| step |
6.5 |
number |
| wheelEnabled |
true |
boolean |
| touchPadEnabled |
true |
boolean |
| limitsOnWheel |
true |
boolean |
Pan prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| disableOnTarget |
[] |
array of class names or node tags (div,span...) |
| lockAxisX |
false |
boolean |
| lockAxisY |
false |
boolean |
| velocity |
false |
boolean |
| velocityEqualToMove |
false |
boolean |
| velocitySensitivity |
1 |
number |
| velocityMinSpeed |
1.2 |
number |
| velocityBaseTime |
1800 |
number |
| velocityAnimationType |
easeOut |
string |
| padding |
true |
boolean |
| paddingSize |
40 |
number |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
Pinch prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
zoomIn prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| step |
70 |
number |
| animation |
true |
boolean |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
zoomOut prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| step |
70 |
number |
| animation |
true |
boolean |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
doubleClick prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| step |
70 |
number |
| animation |
true |
boolean |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
| mode |
zoomIn |
zoomIn / zoomOut / reset |
reset prop elements
| Props |
Default |
Type |
| disabled |
false |
boolean |
| animation |
true |
boolean |
| animationTime |
200 |
number |
| animationType |
easeOut |
string |
Animations types
| Value |
| easeOut |
| linear |
| easeInQuad |
| easeOutQuad |
| easeInOutQuad |
| easeInCubic |
| easeOutCubic |
| easeInOutCubic |
| easeInQuart |
| easeOutQuart |
| easeInOutQuart |
| easeInQuint |
| easeOutQuint |
| easeInOutQuint |
Double click modes
| Value |
| zoomIn |
| zoomOut |
| reset |
| Value |
Description |
Type |
| setScale(scale, animationTime, animationType) |
Sets scale |
Number |
| setPositionX(positionX, animationTime, animationType) |
Sets position x |
Number |
| setPositionY(positionY, animationTime, animationType) |
Sets position y |
Number |
| zoomIn() |
Zooming in function, used for controls button |
--- |
| zoomOut() |
Zooming out function, used for controls button |
--- |
| setTransform(positionX, positionY, scale, animationTime, animationType) |
Sets transformations of content |
Number or null |
| resetTransform() |
Reset transformations to the initial values |
Number |
GitHub