|
1 | 1 | import { ref } from 'vue-demi'
|
| 2 | +import type { ConfigurableEventFilter } from '@vueuse/shared' |
2 | 3 | import { useEventListener } from '../useEventListener'
|
3 | 4 | import type { ConfigurableWindow } from '../_configurable'
|
4 | 5 | import { defaultWindow } from '../_configurable'
|
5 | 6 | import type { Position } from '../types'
|
6 | 7 |
|
7 |
| -export interface MouseOptions extends ConfigurableWindow { |
| 8 | +export interface MouseOptions extends ConfigurableWindow, ConfigurableEventFilter { |
8 | 9 | /**
|
9 | 10 | * Mouse position based by page or client
|
10 | 11 | *
|
@@ -46,6 +47,7 @@ export function useMouse(options: MouseOptions = {}) {
|
46 | 47 | resetOnTouchEnds = false,
|
47 | 48 | initialValue = { x: 0, y: 0 },
|
48 | 49 | window = defaultWindow,
|
| 50 | + eventFilter, |
49 | 51 | } = options
|
50 | 52 |
|
51 | 53 | const x = ref(initialValue.x)
|
@@ -82,12 +84,20 @@ export function useMouse(options: MouseOptions = {}) {
|
82 | 84 | }
|
83 | 85 | }
|
84 | 86 |
|
| 87 | + const mouseHandlerWrapper = (event: MouseEvent) => { |
| 88 | + return eventFilter === undefined ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {} as any) |
| 89 | + } |
| 90 | + |
| 91 | + const touchHandlerWrapper = (event: TouchEvent) => { |
| 92 | + return eventFilter === undefined ? touchHandler(event) : eventFilter(() => touchHandler(event), {} as any) |
| 93 | + } |
| 94 | + |
85 | 95 | if (window) {
|
86 |
| - useEventListener(window, 'mousemove', mouseHandler, { passive: true }) |
87 |
| - useEventListener(window, 'dragover', mouseHandler, { passive: true }) |
| 96 | + useEventListener(window, 'mousemove', mouseHandlerWrapper, { passive: true }) |
| 97 | + useEventListener(window, 'dragover', mouseHandlerWrapper, { passive: true }) |
88 | 98 | if (touch) {
|
89 |
| - useEventListener(window, 'touchstart', touchHandler, { passive: true }) |
90 |
| - useEventListener(window, 'touchmove', touchHandler, { passive: true }) |
| 99 | + useEventListener(window, 'touchstart', touchHandlerWrapper, { passive: true }) |
| 100 | + useEventListener(window, 'touchmove', touchHandlerWrapper, { passive: true }) |
91 | 101 | if (resetOnTouchEnds)
|
92 | 102 | useEventListener(window, 'touchend', reset, { passive: true })
|
93 | 103 | }
|
|
0 commit comments