From 2975a0eaf95ebd119284305f5c72ff3750a97ef9 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 15 Jan 2024 21:06:14 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=A7=A6=E6=91=B8?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E5=92=8C=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=85=B1=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/directives/longpress.js | 29 ++++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/resources/assets/js/directives/longpress.js b/resources/assets/js/directives/longpress.js index 9a30f301d..9b114849b 100644 --- a/resources/assets/js/directives/longpress.js +++ b/resources/assets/js/directives/longpress.js @@ -1,8 +1,12 @@ -const useModeTouch = $A.isIos() && "ontouchend" in document; +const isSupportTouch = "ontouchend" in document; + // 长按或右键指令 const longpress = { bind: function (el, binding) { let delay = 500, + mode = 'default', + isCall = false, + pressTimer = null, callback = binding.value; if ($A.isJson(binding.value)) { delay = binding.value.delay || 500; @@ -16,38 +20,43 @@ const longpress = { el.__longpressContextmenu__ = (e) => { e.preventDefault() e.stopPropagation() - if (!useModeTouch) { + if (mode === 'default') { callback(e, el) } } el.addEventListener('contextmenu', el.__longpressContextmenu__); + // 不支持touch - if (!useModeTouch) { + if (!isSupportTouch) { return } - // 定义变量 - let pressTimer = null - let isCall = false + // 创建计时器( 500秒后执行函数 ) el.__longpressStart__ = (e) => { if (e.type === 'click' && e.button !== 0) { return } + mode = 'touch' isCall = false if (pressTimer === null) { pressTimer = setTimeout(() => { - isCall = true - callback(e.touches[0], el) + if (mode === 'touch') { + isCall = true + callback(e.touches[0], el) + } }, delay) } } + // 取消计时器 el.__longpressCancel__ = (e) => { if (pressTimer !== null) { clearTimeout(pressTimer) pressTimer = null } + mode = 'default' } + // 点击拦截 el.__longpressClick__ = (e) => { if (isCall) { @@ -56,9 +65,9 @@ const longpress = { } el.__longpressCancel__(e) } + // 添加事件监听器 el.addEventListener('touchstart', el.__longpressStart__) - // 取消计时器 el.addEventListener('click', el.__longpressClick__) el.addEventListener('touchmove', el.__longpressCancel__) el.addEventListener('touchend', el.__longpressCancel__) @@ -68,7 +77,7 @@ const longpress = { unbind(el) { el.removeEventListener('contextmenu', el.__longpressContextmenu__) delete el.__longpressContextmenu__ - if (!useModeTouch) { + if (!isSupportTouch) { return } el.removeEventListener('touchstart', el.__longpressStart__)