跳到主要内容

useMouseInElement

分类
导出大小
1.87 kB
上次更改
3 个月前

相对于元素的响应式鼠标位置

演示

将鼠标悬停在我身上
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
<HTMLDivElement>('target')
const {
x
,
y
,
isOutside
} =
useMouseInElement
(
target
)
</script> <template> <
div
ref
="
target
">
<
h1
>Hello world</
h1
>
</
div
>
</template>

组件用法

此函数还通过 @vueuse/components 包提供了一个无渲染组件版本。了解更多用法

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

指令用法

此函数还通过 @vueuse/components 包提供了一个指令版本。了解更多用法

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
} /** * Reactive mouse position related to an element. * * @see https://vueuse.org.cn/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
>

来源

源代码演示文档

贡献者

Anthony Fu
Anthony Fu
wheat
IlyaL
IlyaL
Vida Xie
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

更新日志

8c521 - feat(components)!: 重构组件并使其保持一致 (#4912)
v13.6.0
cf02b - fix: 正确更新 elementX 和 elementY (#4846)
v13.4.0
04af9 - fix: 修复目标元素更新未被考虑的问题 (#4782)
v12.4.0
dd316 - feat: 尽可能在所有地方使用被动事件处理程序 (#4477)
v12.3.0
34be5 - feat: 添加了 vMouseInElement 的指令 (#4438)
0a9ed - feat!: 放弃对 Vue 2 的支持,优化打包并清理 (#4349)
v11.1.0
4dcc2 - fix: 允许 el 为 Element 实例 (#4189)
efe4d - fix: el.getBoundingClientRect 不是一个函数 (#4056)
v10.7.0
fccf2 - feat: 升级依赖 (#3614)
v10.6.0
7c88d - fix: 优化外部计算 (#3380)

根据 MIT 许可证发布。