Have a DOM element that needs to be panned or zoomed? This is the zero-dependency library you're looking for (with TypeScript typings). Built especially for usage with <img />
or <video />
elements.
npm install zero-g --save
import { createZeroG } from 'zero-g';
const elemToPanAndZoom = document.getElementById('element');
const instance = createZeroG(elemToPanAndZoom, { /* options */ });
To control a single HTML Element, use createZeroG
:
<div>
<img id="img" src="https://i.pinimg.com/originals/05/1d/b9/051db99b019d8ab861c87ac76c04ed81.jpg" alt="my image" />
</div>
import { createZeroG } from 'zero-g';
const elem = document.getElementById('img');
const z = createZeroG(elem, {/* Optional options object */});
changeCursorOnPan
-boolean
- Optional - Iftrue
, changes the mouse cursor tograbbing
on pan. Defaults totrue
.diabled
-boolean
- Optional - Not Implemented - In Progress - Iftrue
, disabled the zeroG instance from allowing panning or zoomingrefitOnResize
-boolean
- Optional - Iftrue
, performs azoomFit
operation when the window resizes to recenter the zoomed / panned element.onScaleChange
-(currentScale: number) => void
- Optional - If provided, function will be executed on initial render and on subsequent zoom operations with the current scale of the zoomable element. Useful for displaying the current zoom percentage to your users.onPanStart
-(panEvent: IPanEvent, instance: ZeroGInstance) => void
- Optional - If provided, will be executed whenever the user has started panning the element. Will be provided an object containing properties about the pan event, as well as the zeroG instance that was panned.onPanMove
-(panEvent: IPanEvent, instance: ZeroGInstance) => void
- Optional - If provided, will be executed whenever the user is actively moving the element around. Will be provided an object containing properties about the pan event, as well as the zeroG instance that was panned.onPanEnd
-(panEvent: IPanEvent, instance: ZeroGInstance) => void
- Optional - If provided, will be executed whenever the user has finished panning the element. Will be provided an object containing properties about the pan event, as well as the zeroG instance that was panned.
If you want to synchronize two or more instance of zeroG to have synchronized pan and zooming (useful if you're comparing items side-by-side), you can use createDockingProcedure
<div id="outer">
<div>
<img id="img1" src="https://i.pinimg.com/originals/05/1d/b9/051db99b019d8ab861c87ac76c04ed81.jpg" alt="my image" />
</div>
<div>
<img id="img2" src="https://i.pinimg.com/originals/05/1d/b9/051db99b019d8ab861c87ac76c04ed81.jpg" alt="my image" />
</div>
</div>
import { createDockingProcedure } from 'zero-g';
const elems = document.querySelectorAll('img');
const d = createDockingProcedure(elems, { /* Optional options object */ });
ALl the options are the same as createZeroG
, but apply globally to all child instances of zeroG
that createDockingProcedure
creates.