当前位置:首页 > 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实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue 实现后退

vue 实现后退

实现后退功能的方法 在Vue中实现后退功能通常需要结合浏览器历史记录API或Vue Router的导航方法。以下是几种常见的实现方式: 使用Vue Router的go方法 this.$router…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

vue实现选择框

vue实现选择框

Vue 实现选择框的方法 Vue 中可以通过多种方式实现选择框(下拉框),包括原生 HTML 的 <select> 元素结合 Vue 的数据绑定,或者使用第三方 UI 库如 Element…