Cleanup panzoom implementation

This commit is contained in:
ZXY101
2023-08-01 13:47:06 +02:00
parent e4756e87a4
commit 3c2199b06a
4 changed files with 35 additions and 25 deletions

View File

@@ -0,0 +1,7 @@
<script lang="ts">
import { initPanzoom } from './util';
</script>
<div use:initPanzoom>
<slot />
</div>

2
src/lib/panzoom/index.ts Normal file
View File

@@ -0,0 +1,2 @@
export * from './util'
export {default as Panzoom} from './Panzoom.svelte'

23
src/lib/panzoom/util.ts Normal file
View File

@@ -0,0 +1,23 @@
import panzoom from 'panzoom';
import type { PanZoom } from 'panzoom';
import { writable } from 'svelte/store';
export const pz = writable<PanZoom | undefined>(undefined);
export function initPanzoom(node: HTMLElement) {
pz.set(
panzoom(node, {
bounds: false,
maxZoom: 10,
minZoom: 0.1,
zoomDoubleClickSpeed: 1,
enableTextSelection: true,
beforeMouseDown: (e) => {
const nodeName = (e.target as HTMLElement).nodeName;
return nodeName === 'P';
},
beforeWheel: (e) => e.altKey,
onTouch: (e) => e.touches.length > 1
})
);
}

View File

@@ -1,29 +1,7 @@
<script lang="ts"> <script lang="ts">
import img from '$lib/assets/000a.jpg'; import img from '$lib/assets/000a.jpg';
import Button from '$lib/components/Button.svelte'; import Button from '$lib/components/Button.svelte';
import panzoom from 'panzoom'; import { pz, Panzoom } from '$lib/panzoom';
import type { PanZoom } from 'panzoom';
import { writable } from 'svelte/store';
export const pz = writable<PanZoom | undefined>(undefined);
function initPanzoom(node: any) {
pz.set(
panzoom(node, {
bounds: false,
maxZoom: 10,
minZoom: 0.1,
zoomDoubleClickSpeed: 1,
enableTextSelection: true,
beforeMouseDown: (e) => {
const nodeName = (e.target as HTMLElement).nodeName;
return nodeName === 'P';
},
beforeWheel: (e) => e.altKey,
onTouch: (e) => e.touches.length > 1
})
);
}
function test() { function test() {
$pz?.moveTo(0, 0); $pz?.moveTo(0, 0);
@@ -33,8 +11,8 @@
<div> <div>
<Button variant="primary" on:click={test}>Click</Button> <Button variant="primary" on:click={test}>Click</Button>
<div id="container" use:initPanzoom> <Panzoom>
<p draggable="false">my selectable tex</p> <p draggable="false">my selectable tex</p>
<img draggable="false" src={img} alt="a" /> <img draggable="false" src={img} alt="a" />
</div> </Panzoom>
</div> </div>