Cleanup panzoom implementation
This commit is contained in:
7
src/lib/panzoom/Panzoom.svelte
Normal file
7
src/lib/panzoom/Panzoom.svelte
Normal 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
2
src/lib/panzoom/index.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export * from './util'
|
||||||
|
export {default as Panzoom} from './Panzoom.svelte'
|
||||||
23
src/lib/panzoom/util.ts
Normal file
23
src/lib/panzoom/util.ts
Normal 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
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user