From fb39223c2e397ee93a1d48bc5aa0cfb7df52ae29 Mon Sep 17 00:00:00 2001 From: keeplearning66 <1256734885@qq.com> Date: Fri, 22 Aug 2025 10:17:07 +0800 Subject: [PATCH 1/2] feat(onLongPress): allow function as value in delay --- packages/core/onLongPress/index.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/core/onLongPress/index.ts b/packages/core/onLongPress/index.ts index d7e2c4c1b5f..4c8f319aa09 100644 --- a/packages/core/onLongPress/index.ts +++ b/packages/core/onLongPress/index.ts @@ -14,7 +14,7 @@ export interface OnLongPressOptions { * * @default 500 */ - delay?: number + delay?: number | ((ev: PointerEvent) => number) modifiers?: OnLongPressModifiers @@ -64,6 +64,14 @@ export function onLongPress( hasLongPressed = false } + function getDelay(ev: PointerEvent): number { + const delay = options?.delay + if (typeof delay === 'function') { + return delay(ev) + } + return delay ?? DEFAULT_DELAY + } + function onRelease(ev: PointerEvent) { const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed] clear() @@ -108,7 +116,7 @@ export function onLongPress( hasLongPressed = true handler(ev) }, - options?.delay ?? DEFAULT_DELAY, + getDelay(ev), ) } From 0ff941a0225449446eab7b65308ac59a5a349ab0 Mon Sep 17 00:00:00 2001 From: keeplearning66 <1256734885@qq.com> Date: Fri, 22 Aug 2025 10:46:37 +0800 Subject: [PATCH 2/2] test: add unit tests --- packages/core/onLongPress/index.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/onLongPress/index.test.ts b/packages/core/onLongPress/index.test.ts index 13a5bda0469..0e6486e7ffc 100644 --- a/packages/core/onLongPress/index.test.ts +++ b/packages/core/onLongPress/index.test.ts @@ -24,9 +24,9 @@ describe('onLongPress', () => { expect(onLongPressCallback).toHaveBeenCalledTimes(1) } - async function triggerCallbackWithDelay(isRef: boolean) { + async function triggerCallbackWithDelay(isRef: boolean, delayFunc?: (ev: PointerEvent) => number) { const onLongPressCallback = vi.fn() - onLongPress(isRef ? element : element.value, onLongPressCallback, { delay: 1000 }) + onLongPress(isRef ? element : element.value, onLongPressCallback, { delay: delayFunc ?? 1000 }) // first pointer down element.value.dispatchEvent(pointerdownEvent) @@ -199,6 +199,7 @@ describe('onLongPress', () => { it('should remove event listeners after being stopped', () => stopEventListeners(isRef)) it('should trigger longpress if pointer is moved', () => triggerCallbackWithThreshold(isRef)) it('should trigger onMouseUp when pointer is released', () => triggerOnMouseUp(isRef)) + it('should trigger longpress after options.delay ms when options.delay is a function', () => triggerCallbackWithDelay(isRef, () => 1000)) }) }