From 0c39d0ca2d3537adea3f83624577523365923e74 Mon Sep 17 00:00:00 2001 From: Sergey Danilchenko Date: Tue, 3 Jan 2023 15:48:57 +0200 Subject: [PATCH] feat(useMouse): support for movement detection (#2589) Co-authored-by: Sergey Danilchenko --- packages/core/useMouse/index.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core/useMouse/index.ts b/packages/core/useMouse/index.ts index 70435c6c290..58754e7270d 100644 --- a/packages/core/useMouse/index.ts +++ b/packages/core/useMouse/index.ts @@ -7,11 +7,12 @@ import type { Position } from '../types' export interface UseMouseOptions extends ConfigurableWindow, ConfigurableEventFilter { /** - * Mouse position based by page or client + * Mouse position based by page, client, or relative to previous position * * @default 'page' */ - type?: 'page' | 'client' + type?: 'page' | 'client' | 'movement' + /** * Listen to `touchmove` events * @@ -63,6 +64,10 @@ export function useMouse(options: UseMouseOptions = {}) { x.value = event.clientX y.value = event.clientY } + else if (type === 'movement') { + x.value = event.movementX + y.value = event.movementY + } sourceType.value = 'mouse' } const reset = () => { @@ -95,7 +100,7 @@ export function useMouse(options: UseMouseOptions = {}) { if (window) { useEventListener(window, 'mousemove', mouseHandlerWrapper, { passive: true }) useEventListener(window, 'dragover', mouseHandlerWrapper, { passive: true }) - if (touch) { + if (touch && type !== 'movement') { useEventListener(window, 'touchstart', touchHandlerWrapper, { passive: true }) useEventListener(window, 'touchmove', touchHandlerWrapper, { passive: true }) if (resetOnTouchEnds)