From f794df4e6f74a2a5ff46d6f67c8d7f09e0d98456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Thu, 13 Jun 2024 19:12:24 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E9=99=90?= =?UTF-8?q?=E5=88=B6TouchEvent=E6=8F=92=E4=BB=B6=E5=8F=8C=E6=8C=87?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E7=9A=84=E6=9C=80=E5=A4=A7=E5=80=BC=E5=92=8C?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/constants/defaultOptions.js | 4 ++++ simple-mind-map/src/plugins/TouchEvent.js | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index 44257b04..526665fe 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -323,6 +323,10 @@ export const defaultOpt = { // 禁止双指缩放,你仍旧可以使用api进行缩放 // 需要注册TouchEvent插件后生效 disableTouchZoom: false, + // 允许最大和最小的缩放值,百分数 + // 传-1代表不限制 + minTouchZoomScale: 20, + maxTouchZoomScale: -1, // 【Scrollbar插件】 // 当注册了滚动条插件(Scrollbar)时,是否将思维导图限制在画布内,isLimitMindMapInCanvas不再起作用 diff --git a/simple-mind-map/src/plugins/TouchEvent.js b/simple-mind-map/src/plugins/TouchEvent.js index 61fae73d..d13569ca 100644 --- a/simple-mind-map/src/plugins/TouchEvent.js +++ b/simple-mind-map/src/plugins/TouchEvent.js @@ -66,7 +66,13 @@ class TouchEvent { let touch = e.touches[0] this.dispatchMouseEvent('mousemove', touch.target, touch) } else if (len === 2) { - if (this.mindMap.opt.disableTouchZoom) return + let { disableTouchZoom, minTouchZoomScale, maxTouchZoomScale } = + this.mindMap.opt + if (disableTouchZoom) return + minTouchZoomScale = + minTouchZoomScale === -1 ? -Infinity : minTouchZoomScale / 100 + maxTouchZoomScale = + maxTouchZoomScale === -1 ? Infinity : maxTouchZoomScale / 100 let touch1 = e.touches[0] let touch2 = e.touches[1] let ox = touch1.clientX - touch2.clientX @@ -101,8 +107,14 @@ class TouchEvent { if (Math.abs(distance - viewBefore.distance) <= 10) { scale = viewBefore.scale } + scale = + scale < minTouchZoomScale + ? minTouchZoomScale + : scale > maxTouchZoomScale + ? maxTouchZoomScale + : scale const ratio = 1 - scale / viewBefore.scale - view.scale = scale < 0.1 ? 0.1 : scale + view.scale = scale view.x = viewBefore.x + (cx - viewBefore.x) * ratio +