Pan and zoom for images
Intorduction
@beoe/pan-zoom
is a small client side script that adds pan and zoom capabilities to SVG images (to any DOM node actually).
There are a lot of similar scripts, but the main difference is that this one supports gestures for all types of devices:
intention | mouse | trackpad/touchpad | touchscren |
---|---|---|---|
pan | click + move | click + move | two finger drag |
zoom | Ctrl + wheel | pinch | pinch |
reset | double click | double click | double tap |
scroll | wheel | two finger drag | one finger drag |
Pay attention:
- gestures intentionally selected to not interfere with the system’s default scroll gestures, to avoid “scroll traps”
- Cmd + click - zoom in
- Alt + click - zoom out
- First double click (tap) - zoom in x2
Try to use gestures with this image 👇
Installation
-
Install dependencies
-
Add
svgpanzoom.ts
-
Use
svgpanzoom.ts
in the base layout
Starlight specific code
-
Use
svgpanzoom.ts
in thePageFrame
-
Override
PageFrame
in Astro config
Further improvements
- style pan-zoom buttons
- create rehype plugin to wrap images into container (
<figure class="beoe"></figure>
), to avoid creating it on the client side