51
Vue 3 學習之旅
高級組合式函數

Day 51: 範例:useMouse 滑鼠位置追蹤

·6 分鐘閱讀·滑鼠追蹤

摘要

useMouse 是一個經典的組合式函數範例,它封裝了監聽滑鼠移動事件、並回傳滑鼠 X 和 Y 座標的響應式狀態的邏輯。

定義與說明

這個函數會在內部使用 ref 來儲存 x 和 y 座標,並使用 onMounted 來註冊 mousemove 事件監聽器,在 onUnmounted 中移除監聽器以防止記憶體洩漏。它將所有與滑鼠追蹤相關的邏輯都封裝在了一起。

實作範例

useMouse 範例
// composables/useMouse.js
import { ref, onMounted, onUnmounted } from 'vue';
export function useMouse() {
  const x = ref(0);
  const y = ref(0);
  function update(event) {
    x.value = event.pageX;
    y.value = event.pageY;
  }
  onMounted(() => window.addEventListener('mousemove', update));
  onUnmounted(() => window.removeEventListener('mousemove', update));
  return { x, y };
}

<!-- ComponentUsingMouse.vue -->
<script setup>
import { useMouse } from './composables/useMouse.js';
const { x, y } = useMouse();
</script>
<template>
  滑鼠位置: {{ x }}, {{ y }}
</template>

結論

useMouse 完美展示了組合式函數的優點:將一個特定的功能(滑鼠追蹤)的所有相關邏輯(狀態、事件監聽、生命週期管理)都封裝在一個獨立、可複用的單元中。

useMouse 滑鼠追蹤 事件監聽