当前位置:首页 > VUE

vue实现长按事件

2026-01-15 02:31:53VUE

实现长按事件的基本思路

在Vue中实现长按事件,可以通过监听mousedowntouchstart事件启动计时器,并在mouseupmouseleavetouchend事件中清除计时器。如果计时器未被清除且达到预设时间,则触发长按事件。

vue实现长按事件

使用原生事件绑定

通过Vue的@mousedown@touchstart指令绑定事件,结合setTimeout实现长按逻辑。

vue实现长按事件

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

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

封装为自定义指令

将长按逻辑封装为Vue自定义指令,方便复用。

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

<script>
export default {
  directives: {
    longpress: {
      bind(el, binding) {
        let pressTimer = null;
        const pressDuration = binding.arg || 1000;

        const start = (e) => {
          if (e.type === 'click' && e.button !== 0) return;
          pressTimer = setTimeout(() => {
            binding.value(e);
          }, pressDuration);
        };

        const cancel = () => {
          clearTimeout(pressTimer);
        };

        el.addEventListener('mousedown', start);
        el.addEventListener('touchstart', start);
        el.addEventListener('mouseup', cancel);
        el.addEventListener('mouseleave', cancel);
        el.addEventListener('touchend', cancel);
      }
    }
  },
  methods: {
    handleLongPress(e) {
      console.log('长按事件触发', e);
    }
  }
};
</script>

注意事项

  • 移动端适配:需同时监听touchstarttouchend事件以支持触摸设备。
  • 性能优化:在组件销毁时移除事件监听,避免内存泄漏(自定义指令中可通过unbind钩子处理)。
  • 防误触:可增加阈值时间(如500ms以上)避免误判短按为长按。

第三方库推荐

若需更复杂的长按交互(如连续触发),可使用以下库:

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

相关文章

vue 实现手册

vue 实现手册

以下是关于 Vue.js 实现手册的整理内容,涵盖核心概念、实践方法和常见场景的解决方案: 核心概念与基础用法 Vue.js 是一个渐进式 JavaScript 框架,核心特点包括数据驱动视图和组件…

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过…

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切…

vue实现多层评论回复

vue实现多层评论回复

Vue 实现多层评论回复 数据结构设计 多层评论通常采用嵌套结构,每个评论对象包含子评论数组。示例数据结构如下: comments: [ { id: 1, content: '…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model 指…

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-se…