Skip to content

useMouseInElement

Category
Export Size
1.87 kB
Last Changed
last month

Reactive mouse position related to an element

Demo

Hover me
x: 0
y: 0
sourceType: null
elementX: 0
elementY: 0
elementPositionX: 0
elementPositionY: 0
elementHeight: 0
elementWidth: 0
isOutside: true

Usage

vue
<script setup lang="ts">
import { 
useMouseInElement
} from '@vueuse/core'
import {
useTemplateRef
} from 'vue'
const
target
=
useTemplateRef
<HTMLDivElement>('target')
const {
x
,
y
,
isOutside
} =
useMouseInElement
(
target
)
</script> <template> <
div
ref
="
target
">
<
h1
>Hello world</
h1
>
</
div
>
</template>

Component Usage

This function also provides a renderless component version via the @vueuse/components package. Learn more about the usage.

vue
<template>
  <UseMouseInElement v-slot="{ 
elementX
,
elementY
,
isOutside
}">
x: {{
elementX
}}
y: {{
elementY
}}
Is Outside: {{
isOutside
}}
</UseMouseInElement> </template>

Directive Usage

This function also provides a directive version via the @vueuse/components package. Learn more about the usage.

vue
<script setup lang="ts">
import { 
vMouseInElement
} from '@vueuse/components'
import {
UseMouseSourceType
} from '@vueuse/core'
interface MouseInElementType {
x
: number
y
: number
sourceType
:
UseMouseSourceType
elementX
: number
elementY
: number
elementPositionX
: number
elementPositionY
: number
elementHeight
: number
elementWidth
: number
isOutside
: boolean
} const
options
= {
handleOutside
: true
} function
onMouseInElement
({
x
,
y
,
sourceType
,
elementX
,
elementY
,
elementPositionX
,
elementPositionY
,
elementHeight
,
elementWidth
,
isOutside
}: MouseInElementType) {
console
.
log
(
x
,
y
,
sourceType
,
elementX
,
elementY
,
elementPositionX
,
elementPositionY
,
elementHeight
,
elementWidth
,
isOutside
)
} </script> <template> <
textarea
v-mouse-in-elem
ent="
onMouseInElement
" />
<!-- with options --> <
textarea
v-mouse-in-elem
ent="
[
onMouseInElement
,
options
]
" />
</template>

Type Declarations

Show Type Declarations
ts
export interface MouseInElementOptions extends UseMouseOptions {
  /**
   * Whether to handle mouse events when the cursor is outside the target element.
   * When enabled, mouse position will continue to be tracked even when outside the element bounds.
   *
   * @default true
   */
  
handleOutside
?: boolean
/** * Listen to window resize event * * @default true */
windowScroll
?: boolean
/** * Listen to window scroll event * * @default true */
windowResize
?: boolean
} /** * Reactive mouse position related to an element. * * @see https://vueuse.org/useMouseInElement * @param target * @param options */ export declare function
useMouseInElement
(
target
?:
MaybeElementRef
,
options
?: MouseInElementOptions,
): {
x
:
ShallowRef
<number, number>
y
:
ShallowRef
<number, number>
sourceType
:
ShallowRef
<
UseMouseSourceType
,
UseMouseSourceType
>
elementX
:
ShallowRef
<number, number>
elementY
:
ShallowRef
<number, number>
elementPositionX
:
ShallowRef
<number, number>
elementPositionY
:
ShallowRef
<number, number>
elementHeight
:
ShallowRef
<number, number>
elementWidth
:
ShallowRef
<number, number>
isOutside
:
ShallowRef
<boolean, boolean>
stop
: () => void
} export type
UseMouseInElementReturn
=
ReturnType
<typeof
useMouseInElement
>

Source

SourceDemoDocs

Contributors

Anthony Fu
Anthony Fu
wheat
IlyaL
IlyaL
Zhong
codlin
Robin
Fernando Fernández
青椒肉丝
Jakub Freisler
Coder Poet
Aymoc
Mikhailov Nikita
vaakian X
Jelf
Ivan Agafonov
Shinigami
Alex Kozack
ctholho
Nurettin Kaya
Antério Vieira

Changelog

8c521 - feat(components)!: refactor components and make them consistent (#4912)
cf02b - fix: correctly update elementX and elementY (#4846)
04af9 - fix: fixing the issue where target element updates were not considered. (#4782)
dd316 - feat: use passive event handlers everywhere is possible (#4477)
34be5 - feat: added directive for vMouseInElement (#4438)
0a9ed - feat!: drop Vue 2 support, optimize bundles and clean up (#4349)
4dcc2 - fix: allow el to be instanceof Element (#4189)
efe4d - fix: el.getBoundingClientRect is not a function (#4056)
fccf2 - feat: upgrade deps (#3614)
7c88d - fix: optimize outside computation (#3380)

Released under the MIT License.