当前位置:首页 > 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 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @whe…

vue实现条件判断

vue实现条件判断

Vue 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式的…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul…