2 回答

TA貢獻1812條經驗 獲得超5個贊
MouseEvent當輸入設備被觸摸時,偵聽器不會被觸發,但TouchEvent偵聽PointerEvent器會被觸發。
PointerEvent是現在推薦的方式,因為它涵蓋了所有輸入設備,包括鼠標和觸摸:
<button
? v-if="!videoIsPlaying"
? @pointerdown="playVideo()"
></button>
長按閱讀:
<template>
? <button
? ? @pointerdown="isHolding = true"
? ? @pointerup="isHolding = false"
? ></button>
</template>
<script setup>
import { ref } from 'vue';
const isHolding = ref(false);
</script>
它們每個都有與 MouseEvent API 相似的事件,即touchstart
=?mousedown
。
我個人發現 TouchEvents 比 PointerEvents 更好,但是,您可能需要進行一些測試才能確定哪種最適合您的情況。
因此,正如您對 Vue 所猜測的那樣,您可以使用@touchstart:
<button
? ? v-if="!videoIsPlaying"
? ? @click="playVideo()"
? ? @mousedown="playVideo()"
? ? @touchstart="playVideo()"
/>
如果您想將其確定為長按,則必須在 上存儲一個值touchstart并在 上更改它touchend:
<button
? ? @touchstart="touching = true"
? ? @touchend="touching = false"
/>
...
data() {
? ? return {
? ? ? ? touching: false
? ? }
}