跳到主要内容

useMouse

分类
导出大小
1.08 kB
上次更改
8 个月前

响应式鼠标位置

演示

基本用法

x: 0
y: 0
sourceType: null

提取器用法

x: 0
y: 0
sourceType: null

基本用法

ts
import { 
useMouse
} from '@vueuse/core'
const {
x
,
y
,
sourceType
} =
useMouse
()

默认启用触控。要只检测鼠标变化,请将 touch 设置为 falsedragover 事件用于在拖动时跟踪鼠标位置。

ts
const { 
x
,
y
} =
useMouse
({
touch
: false })

自定义提取器

也可以提供一个自定义提取器函数来从事件中获取位置。

ts
import type { 
UseMouseEventExtractor
} from '@vueuse/core'
import {
useMouse
,
useParentElement
} from '@vueuse/core'
const
parentEl
=
useParentElement
()
const
extractor
:
UseMouseEventExtractor
=
event
=> (
event
instanceof
MouseEvent
? [
event
.
offsetX
,
event
.
offsetY
]
: null ) const {
x
,
y
,
sourceType
} =
useMouse
({
target
:
parentEl
,
type
:
extractor
})
js
import { useMouse, useParentElement } from '@vueuse/core'
const parentEl = useParentElement()
const extractor = (event) =>
  event instanceof MouseEvent ? [event.offsetX, event.offsetY] : null
const { x, y, sourceType } = useMouse({ target: parentEl, type: extractor })

组件用法

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

vue
<template>
  <UseMouse v-slot="{ 
x
,
y
}">
x: {{
x
}}
y: {{
y
}}
</UseMouse> </template>

类型声明

显示类型声明
ts
export type 
UseMouseCoordType
= "page" | "client" | "screen" | "movement"
export type
UseMouseSourceType
= "mouse" | "touch" | null
export type
UseMouseEventExtractor
= (
event
: MouseEvent | Touch,
) => [
x
: number,
y
: number] | null | undefined
export interface UseMouseOptions extends ConfigurableWindow, ConfigurableEventFilter { /** * Mouse position based by page, client, screen, or relative to previous position * * @default 'page' */
type
?:
UseMouseCoordType
|
UseMouseEventExtractor
/** * Listen events on `target` element * * @default 'Window' */
target
?:
MaybeRefOrGetter
<Window | EventTarget | null | undefined>
/** * Listen to `touchmove` events * * @default true */
touch
?: boolean
/** * Listen to `scroll` events on window, only effective on type `page` * * @default true */
scroll
?: boolean
/** * Reset to initial value when `touchend` event fired * * @default false */
resetOnTouchEnds
?: boolean
/** * Initial values */
initialValue
?:
Position
} /** * Reactive mouse position. * * @see https://vueuse.org.cn/useMouse * @param options */ export declare function
useMouse
(
options
?: UseMouseOptions): {
x
:
ShallowRef
<number, number>
y
:
ShallowRef
<number, number>
sourceType
:
ShallowRef
<
UseMouseSourceType
,
UseMouseSourceType
>
} export type
UseMouseReturn
=
ReturnType
<typeof
useMouse
>

来源

源文件演示文档

贡献者

Anthony Fu
Robin
Anthony Fu
青椒肉丝
Jelf
IlyaL
IlyaL
Fernando Fernández
Robin
Eduardo Luiz Schilling
karukenert
Cats Juice
丶远方
RAX7
François Lévesque
vaakian X
Sergey Danilchenko
lzdFeiFei
Scott Bedard
Marshall Thompson
Shinigami
wheat
Alex Kozack
Antério Vieira

更新日志

8c521 - feat(components)!: 重构组件并使其保持一致 (#4912)
v12.8.0
7432f - feat(types): 废弃 MaybeRefMaybeRefOrGetter,转而使用 Vue 的原生类型 (#4636)
v12.6.0
ce9e5 - 修复: 检查 MouseEvent 而不是 Touch 以与 FF 兼容 (#4457)
v12.4.0
dd316 - feat: 尽可能在所有地方使用被动事件处理程序 (#4477)
0a9ed - feat!: 放弃对 Vue 2 的支持,优化打包并清理 (#4349)
v11.3.0
cceeb - 修复: 纠正拼写错误 (#4348)
e8d11 - 修复: 记录之前的滚动值 (#4244)
v10.4.0
c2f64 - 修复: 当 typepage 时,位置不会随页面滚动而改变,关闭 #2922 (#3244)
v10.1.0
4bb5b - 功能: 支持自定义事件提取器 (#2991)

根据 MIT 许可证发布。