Skip to content

useMouseInElement

类别
导出体积
1.86 kB
上次更改
3 months ago

与元素相关的鼠标位置的响应式状态

示例

Hover me
x: 0
y: 0
sourceType: null
elementX: 0
elementY: 0
elementPositionX: 0
elementPositionY: 0
elementHeight: 0
elementWidth: 0
isOutside: true
Hover me, I'm an inline element
x: 0
y: 0
sourceType: null
elementX: 0
elementY: 0
elementPositionX: 0
elementPositionY: 0
elementHeight: 0
elementWidth: 0
isOutside: true

用法

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

组件用法

vue
<template>
  <UseMouseInElement v-slot="{ 
elementX
,
elementY
,
isOutside
}">
x: {{
elementX
}}
y: {{
elementY
}}
是否在外部: {{
isOutside
}}
</UseMouseInElement> </template>

指令使用

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>

类型声明

显示类型声明
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
} export interface UseMouseInElementReturn extends UseMouseReturn {
elementX
:
ShallowRef
<number>
elementY
:
ShallowRef
<number>
elementPositionX
:
ShallowRef
<number>
elementPositionY
:
ShallowRef
<number>
elementHeight
:
ShallowRef
<number>
elementWidth
:
ShallowRef
<number>
isOutside
:
ShallowRef
<boolean>
stop
: () => void
} /** * 与元素相关的响应式鼠标位置 * * @see https://vueuse.org/useMouseInElement * @param target * @param options */ export declare function
useMouseInElement
(
target
?:
MaybeElementRef
,
options
?: MouseInElementOptions,
): {
x
:
ShallowRef
<number>
y
:
ShallowRef
<number>
sourceType
:
ShallowRef
<
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
}

源码

源码演示文档

贡献者

Anthony Fu
一纸忘忧
Vida Xie
Anthony Fu
wheat
IlyaL
IlyaL
一纸忘忧
Jialong Lu
Amittai Siavava
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

更新日志

Pending for release...
52d68 - fix(directive): create disposable directive func cleanup of side effects unmounted (#5244)
62dfb - feat: add support for tracking inline-level elements (#5049)
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)