A vanilla-js module for adding zoom-on-wheel and pan-on-drag behavior to inline SVG elements.
npm install svg-pan-zoom-container



A vanilla-js module for adding zoom-on-wheel and pan-on-drag behavior to inline SVG elements.
No need to write scripts. Just markup.
1. Load this module.
2. Diddle the parent element of the inline SVG element:
* Add data-zoom-on-wheel attribute to add zoom-on-wheel behavior.
* Add data-pan-on-drag attribute to add pan-on-drag behavior.
* Make sure that the container's height is not "auto". The container's height must not be calculated from its content.
That's it!
``html
Installation
$3
`
$ npm i svg-pan-zoom-container
``js
import 'svg-pan-zoom-container'
`$3
`html
`
Options
Some options can be specified as
data-zoom-on-wheel and data-pan-on-drag attribute value.
Option name and value should be separated by colon (:).
Multiple options should be separated by semicolon (;).$3
`html
data-zoom-on-wheel="zoom-amount: 0.01; min-scale: 0.3; max-scale: 20;"
data-pan-on-drag="button: right;"
style="height: 80vh;"
>
$3
| Name | Type | Default | Description |
| ---------------- | ----------------------------- | -------------- | ----------------------------------------- |
| zoom-amount | number | 0.002 | Zoom amount per
deltaY of wheel events. |
| min-scale | number | 1 | Minimum scale. |
| max-scale | number | 10 | Maximum scale. |$3
| Name | Type | Default | Description |
| ------- | --------------------------------------------- | ------- | --------------------------------------------------- |
| button | "left" \| "right" | "left" | Mouse button to drag to pan. |
| modifier| "" \| "Alt" \| "Control" \| "Meta" \| "Shift" | "" | Drag to pan only when this modifier key is pressed. |
Observation
Observe the
transform attribute of the SVG element using MutationObserver.`javascript
const container = document.getElementById('my-svg-container')const observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
console.log('scale:', getScale(container));
});
});
observer.observe(container.firstElementChild, {
attributes: true,
attributeFilter: ['transform'],
});
`
API
This module provides some functions for scripting to control pan and zoom behavior.
$3
#### When installing via npm
`javascript
import { pan, zoom, getScale, setScale, resetScale } from 'svg-pan-zoom-container';
`#### When installing via CDN
`html
`$3
Pans.
$3
Returns current scale.
The return value is a 1-based fraction, not a percentage.
$3
Sets scale.
The
value is considered as 1-based fraction, not as percentage.The
options can be specified as part of the following object (following values are the default):`javascript
const options = {
origin: {
clientX: 0,
clientY: 0,
},
minScale: 1,
maxScale: 10,
};
`$3
Resets scale and scroll position.
$3
Equivalents to
setScale(container, getScale(container) * ratio, options)`.