1.2.0 • Published 3 years ago

@dior/react-prismazoom v1.2.0

Weekly downloads
782
License
ISC
Repository
github
Last release
3 years ago

react-prismazoom

About

A pan and zoom component for React, using CSS transformations.

Depends only upon prop-types, react and react-dom modules.
Works on both desktop and mobile.

Online demo here!

Zoom features :mag_right:

  • Zoom with the mouse-wheel or a two-finger pinch
  • Zoom using double-click or double-tap
  • Zoom on selected area and center

Pan features :point_up_2:

  • Pan with the mouse pointer or with one finger when zoomed-in
  • Intuitive panning depending on available space when zoomed-in
  • Adjusts cursor style to indicate in which direction the element can be moved

Installation

Install the component

$ npm i -D react-prismazoom

Install the example project

This project includes a full-featured application example.

First clone the project.

Then, install it:

$ npm i

Run the Webpack Dev Server:

$ npm run start

Go to http://localhost:1664.

Note: sources of this example can be found in example/src.

Run unit tests

You can either run all tests at once:

$ npm test

Or run tests each time a change on source files occured:

$ npm run watchTest

Usage

Implementation

import PrismaZoom from 'react-prismazoom'

<PrismaZoom>
  <img src="my-image.png" />
  <p>A text that can be zoomed and dragged</p>
</PrismaZoom>

Props

NameTypeDefaultDescription
classNamestringNoneClass name to apply on the zoom wrapper.
styleobjectNoneStyle to apply on the zoom wrapper. Note that transform, transition, cursor, touch-action and will-change cannot be overridden. Example: style={{backgroundColor: 'red'}}.
minZoomnumber1Minimum zoom ratio.
maxZoomnumber5Maximum zoom ratio.
scrollVelocitynumber0.1Zoom increment or decrement on each scroll wheel detection.
onZoomChangefunctionnullFunction called each time the zoom value changes.
leftBoundarynumber0Left screen-relative boundary, used to limit panning zone.
rightBoundarynumber0Right screen-relative boundary, used to limit panning zone.
topBoundarynumber0Top screen-relative boundary, used to limit panning zone.
bottomBoundarynumber0Bottom screen-relative boundary, used to limit panning zone.
animDurationnumber0.25Animation duration (in seconds).
doubleTouchMaxDelaynumber300Max delay between two taps to consider a double tap (in milliseconds).
decelerationDurationnumber750Decelerating movement duration after a mouse up or a touch end event (in milliseconds).

Note: all props are optional.

Public methods

These functions can be called from parent components.

zoomIn (value)
Increments the zoom with the given value.
Param {value: Number} : Zoom value

zoomOut (value)
Decrements the zoom with the given value.
Param {value: Number} : Zoom value

zoomToZone (relX, relY, relWidth, relHeight)
Zoom-in on the specified zone with the given relative coordinates and dimensions.
Param {relX: Number} : Relative X position of the zone left-top corner in pixels
Param {relY: Number} : Relative Y position of the zone left-top corner in pixels
Param {relWidth: Number} : Zone width in pixels
Param {relHeight: Number} : Zone height in pixels

reset ()
Resets the component to its initial state.

getZoom ()
Returns the current zoom value.
Return {Number} : Zone value

License

React PrismaZoom is licensed under the ISC license. See the LICENSE.md file for more details.