@rbuljan/zoompan
v1.0.0
Published
Zoomable and pannable area with scrollbars. Inspired by graphical editors like Photoshop.
Maintainers
Readme
ZoomPan
Zoomable and pannable area with scrollbars.
Inspired by graphical editors like Photoshop.
Supports Pinch gesture for scaling

Example
See: example/index.html for a use-case.
Getting started
npm i @rbuljan/zoompanHTML:
<!-- index.html -->
<div id="myEditor"></div>I.e: using Vite.js
// main.js
import "@rbuljan/zoompan/zoompan.css";
import ZoomPan from "@rbuljan/zoompan";
const ZP = new ZoomPan("#myEditor", {
width: 800,
height: 600,
onInit() {
this.elCanvas.style.backgroundColor = "gold";
this.elCanvas.textContent = "Hello ZoomPan!";
},
onChange() {
console.log(this);
},
// other options here...
});
console.log(ZP);Options
| Name | Type | Default | Description |
| -------------------- | ------- | ------- | ------------------------------------- |
| width | Number | 800 | Canvas width |
| height | Number | 600 | Canvas height |
| offsetX | Number | 0 | Canvas offset X (from center) |
| offsetY | Number | 0 | Canvas offset Y (from center) |
| scale | Number | 1 | Initial Scale (if not fitted on init) |
| scaleOld | Number | scale | Old Scale value (before changed) |
| scaleFactor | Number | 0.2 | Scale factor |
| scaleMin | Number | 0.05 | Scale min value |
| scaleMax | Number | 10 | Scale max value |
| transitionDuration | Number | 250 | ms transition duration |
| padd | Number | 40 | Min visible canvas padd |
| panStep | Number | 50 | Pixels pan step value |
| scrollbars | Boolean | true | Show scrollbars |
| scrollbarsWidth | Number | 14 | px scrollbars size |
| fitOnInit | Boolean | true | Fix canvas into viewport on init |
| canDrag | Boolean | true | If canvas can be pointer-dragged |
| canPinch | Boolean | true | Allow two-finger pinch |
Options — Events
| Name | Description |
| -------------- | -------------------------------- |
| onInit() | Triggered on class instantiation |
| onScale() | Triggered on scale change |
| onPan() | Triggered on pan (pointermove) |
| onChange() | Triggered on: init, pan, scale |
| onPanStart() | Triggered on pan (pointerdown) |
| onPanEnd() | Triggered on pan (pointerup) |
Methods
| Name | Returns | Description |
| ------------------------------------- | --------------------- | ---------------------------------------------- |
| panTo(offsetX, offsetY) | | Pan canvas to new offset (canvas center) |
| scaleTo(scale [, originX, originY]) | | Scale canvas from point origin (canvas center) |
| scaleUp() | | Scale up. Alias for scaleDelta(1) |
| scaleDown() | | Scale down. Alias for scaleDelta(-1) |
| scaleDelta(delta) | | Scale by delta |
| resize(width, height) | | Change canvas width and height |
| updateScrollbars() | | Reposition and resize scrollbars |
| fit() | | Fit canvas into viewport center (contain) |
| getArea() | {width, height} | Get fictive "scroll area" size |
| getCanvas() | {x, y, width, height} | Get Canvas data |
| getViewport() | {x, y, width, height} | Get Viewport data |
| getPointerOrigin(Event) | {originX, originY} | Get pointer XY relative to viewport center |
| getWheelDelta(Event) | number | Get wheel delta +1 or -1 on wheel-down |
| calcScaleDelta(delta) | number | Get the new scale value from delta |
Licence
MIT
