From 7dacc8f23aec4cbc192f2a7f0ec3d4e15ce873f0 Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Tue, 7 May 2024 18:01:36 +0700 Subject: [PATCH] Fix problems when holding NumberStepper's buttons --- src/utils/settings.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/utils/settings.ts b/src/utils/settings.ts index 8137b46..06a90bd 100644 --- a/src/utils/settings.ts +++ b/src/utils/settings.ts @@ -211,10 +211,13 @@ export class SettingElement { onChange && onChange(e, value); } - const onMouseDown = (e: MouseEvent | TouchEvent) => { + const onMouseDown = (e: PointerEvent) => { + e.preventDefault(); + isHolding = true; const args = arguments; + interval && clearInterval(interval); interval = window.setInterval(() => { const event = new Event('click'); (event as any).arguments = args; @@ -223,11 +226,15 @@ export class SettingElement { }, 200); }; - const onMouseUp = (e: MouseEvent | TouchEvent) => { - clearInterval(interval); + const onMouseUp = (e: PointerEvent) => { + e.preventDefault(); + + interval && clearInterval(interval); isHolding = false; }; + const onContextMenu = (e: Event) => e.preventDefault(); + // Custom method ($wrapper as any).setValue = (value: any) => { $text.textContent = value + options.suffix; @@ -235,16 +242,14 @@ export class SettingElement { }; $decBtn.addEventListener('click', onClick); - $decBtn.addEventListener('mousedown', onMouseDown); - $decBtn.addEventListener('mouseup', onMouseUp); - $decBtn.addEventListener('touchstart', onMouseDown); - $decBtn.addEventListener('touchend', onMouseUp); + $decBtn.addEventListener('pointerdown', onMouseDown); + $decBtn.addEventListener('pointerup', onMouseUp); + $decBtn.addEventListener('contextmenu', onContextMenu); $incBtn.addEventListener('click', onClick); - $incBtn.addEventListener('mousedown', onMouseDown); - $incBtn.addEventListener('mouseup', onMouseUp); - $incBtn.addEventListener('touchstart', onMouseDown); - $incBtn.addEventListener('touchend', onMouseUp); + $incBtn.addEventListener('pointerdown', onMouseDown); + $incBtn.addEventListener('pointerup', onMouseUp); + $incBtn.addEventListener('contextmenu', onContextMenu); return $wrapper; }