当前位置:首页 > VUE

vue实现长按事件

2026-03-08 05:12:57VUE

vue实现长按事件的方法

在Vue中实现长按事件可以通过原生事件监听或自定义指令完成。以下是几种常见方法:

使用原生事件监听

通过@mousedown@mouseup(或触摸设备的@touchstart@touchend)结合定时器实现:

<template>
  <button 
    @mousedown="startPress"
    @mouseup="endPress"
    @touchstart="startPress"
    @touchend="endPress"
  >长按触发</button>
</template>

<script>
export default {
  data() {
    return {
      pressTimer: null
    }
  },
  methods: {
    startPress(e) {
      this.pressTimer = setTimeout(() => {
        this.handleLongPress(e)
      }, 1000) // 1秒触发长按
    },
    endPress() {
      clearTimeout(this.pressTimer)
    },
    handleLongPress(e) {
      console.log('长按事件触发', e)
    }
  }
}
</script>

自定义指令实现

封装为可复用的指令:

// main.js或单独指令文件
Vue.directive('longpress', {
  bind(el, binding) {
    let timer = null
    const handler = binding.value

    el.addEventListener('mousedown', (e) => {
      timer = setTimeout(() => {
        handler(e)
      }, 1000)
    })

    el.addEventListener('mouseup', () => {
      clearTimeout(timer)
    })

    // 触摸设备支持
    el.addEventListener('touchstart', (e) => {
      timer = setTimeout(() => {
        handler(e)
      }, 1000)
    })

    el.addEventListener('touchend', () => {
      clearTimeout(timer)
    })
  }
})

// 使用方式
<template>
  <button v-longpress="onLongPress">指令方式</button>
</template>

使用第三方库

vue-long-click库:

vue实现长按事件

npm install vue-long-click
import VueLongClick from "vue-long-click"
Vue.use(VueLongClick, {
  delay: 700,
  interval: 50
})

<template>
  <button v-longclick="handleLongClick">库实现</button>
</template>

注意事项

  • 移动端需同时处理touchstarttouchend事件
  • 清除定时器时要考虑组件销毁时的清理
  • 长按时间阈值通常设为500ms-1000ms
  • 防止长按触发后意外执行点击事件

标签: 事件vue
分享给朋友:

相关文章

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…