当前位置:首页 > VUE

vue实现长按事

2026-02-18 19:06:32VUE

在Vue中实现长按事件可以通过自定义指令或组合式API实现。以下是两种常见方法:

使用自定义指令

注册一个全局或局部指令处理长按逻辑:

vue实现长按事

Vue.directive('longpress', {
  bind(el, binding) {
    let pressTimer = null
    const start = (e) => {
      if (e.button !== 0) return
      pressTimer = setTimeout(() => {
        binding.value()
      }, 800) // 800ms触发长按
    }
    const cancel = () => {
      clearTimeout(pressTimer)
    }

    el.addEventListener('mousedown', start)
    el.addEventListener('touchstart', start)
    el.addEventListener('mouseup', cancel)
    el.addEventListener('mouseleave', cancel)
    el.addEventListener('touchend', cancel)
  }
})

模板中使用:

vue实现长按事

<button v-longpress="handleLongPress">长按我</button>

使用组合式API

在setup函数中封装可复用的长按逻辑:

import { ref } from 'vue'

export function useLongPress(callback, duration = 800) {
  const timer = ref(null)

  const start = (e) => {
    timer.value = setTimeout(() => {
      callback(e)
    }, duration)
  }

  const clear = () => {
    if (timer.value) {
      clearTimeout(timer.value)
      timer.value = null
    }
  }

  return {
    onMouseDown: start,
    onMouseUp: clear,
    onMouseLeave: clear,
    onTouchStart: start,
    onTouchEnd: clear
  }
}

组件中使用:

<template>
  <button 
    @mousedown="longPress.onMouseDown"
    @mouseup="longPress.onMouseUp"
    @mouseleave="longPress.onMouseLeave"
    @touchstart="longPress.onTouchStart"
    @touchend="longPress.onTouchEnd"
  >长按我</button>
</template>

<script setup>
import { useLongPress } from './longPress'
const handleLongPress = () => console.log('长按触发')
const longPress = useLongPress(handleLongPress)
</script>

注意事项

移动端需要同时处理touchstarttouchend事件,PC端处理mousedownmouseup事件。建议设置合理的延迟时间(通常500-1000ms),并在元素移出时清除定时器以避免误触发。

标签: vue长按事
分享给朋友:

相关文章

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sel…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router…