refac
This commit is contained in:
1 parent
7fc5fa1ff3
commit
467be93e6d
2 files changed
+49
-5
No files matched your search
@@ -5,8 +5,8 @@
|
|||||||
const defaultOpts: PanZoomOptions = {
|
const defaultOpts: PanZoomOptions = {
|
||||||
bounds: true,
|
bounds: true,
|
||||||
boundsPadding: 0.1,
|
boundsPadding: 0.1,
|
||||||
zoomSpeed: 0.18,
|
pinchSpeed: 3.5,
|
||||||
pinchSpeed: 3.5
|
beforeWheel: () => true
|
||||||
};
|
};
|
||||||
|
|
||||||
export let className = '';
|
export let className = '';
|
||||||
@@ -20,6 +20,27 @@
|
|||||||
zoomLevel = instance?.getTransform().scale ?? 1;
|
zoomLevel = instance?.getTransform().scale ?? 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleWheel = (e: WheelEvent) => {
|
||||||
|
if (!instance || !containerElement) return;
|
||||||
|
|
||||||
|
if (!e.ctrlKey && !e.metaKey) {
|
||||||
|
const transform = instance.getTransform();
|
||||||
|
if (Math.abs(transform.scale - 1) < 0.01) return;
|
||||||
|
if (Math.abs(e.deltaY) >= Math.abs(e.deltaX)) return;
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
instance.moveBy(-e.deltaX, -e.deltaY);
|
||||||
|
updateZoomLevel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
const rect = containerElement.getBoundingClientRect();
|
||||||
|
instance.zoomTo(e.clientX - rect.left, e.clientY - rect.top, Math.exp(-e.deltaY * 0.002));
|
||||||
|
updateZoomLevel();
|
||||||
|
};
|
||||||
|
|
||||||
const center = () => ({
|
const center = () => ({
|
||||||
x: containerElement?.clientWidth ? containerElement.clientWidth / 2 : 0,
|
x: containerElement?.clientWidth ? containerElement.clientWidth / 2 : 0,
|
||||||
y: containerElement?.clientHeight ? containerElement.clientHeight / 2 : 0
|
y: containerElement?.clientHeight ? containerElement.clientHeight / 2 : 0
|
||||||
@@ -56,6 +77,6 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div bind:this={containerElement} class={className}>
|
<div bind:this={containerElement} class={className} on:wheel|nonpassive={handleWheel}>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
pzInstance = panzoom(sceneEl, {
|
pzInstance = panzoom(sceneEl, {
|
||||||
bounds: true,
|
bounds: true,
|
||||||
boundsPadding: 0.1,
|
boundsPadding: 0.1,
|
||||||
zoomSpeed: 0.065,
|
pinchSpeed: 3.5,
|
||||||
filterKey: (e?: KeyboardEvent) => !!e && slideShortcutKeys.includes(e.key),
|
filterKey: (e?: KeyboardEvent) => !!e && slideShortcutKeys.includes(e.key),
|
||||||
beforeWheel: () => true,
|
beforeWheel: () => true,
|
||||||
beforeMouseDown: () => {
|
beforeMouseDown: () => {
|
||||||
@@ -144,8 +144,31 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleStageWheel = (e: WheelEvent) => {
|
const handleStageWheel = (e: WheelEvent) => {
|
||||||
|
if (e.ctrlKey || e.metaKey) {
|
||||||
|
if (!pzInstance || !sceneEl) return;
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
const rect = sceneEl.getBoundingClientRect();
|
||||||
|
pzInstance.zoomTo(e.clientX - rect.left, e.clientY - rect.top, Math.exp(-e.deltaY * 0.002));
|
||||||
|
zoomLevel = pzInstance.getTransform().scale;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const transform = pzInstance?.getTransform();
|
||||||
|
if (
|
||||||
|
transform &&
|
||||||
|
Math.abs(transform.scale - 1) >= 0.01 &&
|
||||||
|
Math.abs(e.deltaX) > Math.abs(e.deltaY)
|
||||||
|
) {
|
||||||
|
e.preventDefault();
|
||||||
|
pzInstance?.moveBy(-e.deltaX, -e.deltaY);
|
||||||
|
zoomLevel = pzInstance?.getTransform().scale ?? 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (e.ctrlKey || e.metaKey || slides.length <= 1) return;
|
if (slides.length <= 1) return;
|
||||||
|
|
||||||
const multiplier = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? stageEl.clientHeight : 1;
|
const multiplier = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? stageEl.clientHeight : 1;
|
||||||
const dominantDelta = Math.abs(e.deltaY) >= Math.abs(e.deltaX) ? e.deltaY : e.deltaX;
|
const dominantDelta = Math.abs(e.deltaY) >= Math.abs(e.deltaX) ? e.deltaY : e.deltaX;
|
||||||
|
|||||||
Reference in new issue
Block a user