跳至內容

useMouse

類別
匯出大小
1 kB
上次變更
5 天前

響應式滑鼠位置

示範

基本用法

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>

類型宣告

顯示類型宣告
typescript
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.dev.org.tw/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
Anthony Fu
青椒肉絲
Jelf
IlyaL
Robin
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

變更日誌

v12.8.0 於 2025/3/5
7432f - feat(types): 棄用 MaybeRefMaybeRefOrGetter,改用 Vue 原生類型 (#4636)
v12.6.0 於 2025/2/14
ce9e5 - fix: 檢查 MouseEvent 而非 Touch 以在 FF 中運作 (#4457)
v12.4.0 於 2025/1/10
dd316 - feat: 在所有可能的地方使用被動事件處理器 (#4477)
v12.0.0-beta.1 於 2024/11/21
0a9ed - feat!: 移除 Vue 2 支援,最佳化 bundle 並清理程式碼 (#4349)
v11.3.0 於 2024/11/21
cceeb - fix: 修正拼字錯誤 (#4348)
e8d11 - fix: 記錄先前的滾動值 (#4244)
v10.4.0 於 2023/8/25
c2f64 - fix: 當 typepage 時,位置不會在頁面滾動時變更,關閉 #2922 (#3244)
v10.1.0 於 2023/4/22
4bb5b - feat: 支援自訂事件提取器 (#2991)
v10.0.0-beta.4 於 2023/4/13
39d18 - feat: 支援 type: screen (#2467)

以 MIT 授權條款發布。