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