当前位置:首页 > VUE

vue实现长按

2026-03-07 05:36:54VUE

Vue 实现长按功能的方法

在 Vue 中实现长按功能可以通过监听 mousedowntouchstart 事件来开始计时,并在 mouseupmouseleavetouchend 事件中取消计时。以下是几种实现方式:

使用原生事件监听

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

<template>
  <button 
    @mousedown="startPress"
    @mouseup="endPress"
    @mouseleave="endPress"
    @touchstart="startPress"
    @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("长按触发");
      // 执行长按后的逻辑
    }
  }
};
</script>

使用自定义指令

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

vue实现长按

// 注册全局指令
Vue.directive('longpress', {
  bind: function(el, binding) {
    let pressTimer = null;
    const pressDuration = binding.value || 1000;

    const start = (e) => {
      if (e.type === 'click' && e.button !== 0) return;
      pressTimer = setTimeout(() => {
        binding.value();
      }, 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);
  }
});

使用指令:

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

<script>
export default {
  methods: {
    handleLongPress() {
      console.log("长按触发");
    }
  }
};
</script>

使用第三方库

如果需要更复杂的长按交互,可以使用第三方库如 vue-touchhammer.js

vue实现长按

安装 hammer.js

npm install hammerjs

在 Vue 中使用:

import Hammer from 'hammerjs';

export default {
  mounted() {
    const hammer = new Hammer(this.$el);
    hammer.on('press', () => {
      console.log("长按触发");
    });
  }
};

注意事项

  • 移动端兼容性:同时监听 touchstartmousedown 以确保移动端和桌面端兼容。
  • 防误触:设置合理的长按时间阈值(通常 500ms-1000ms)。
  • 性能优化:在组件销毁时清除事件监听和定时器,避免内存泄漏。

以上方法可以根据实际需求选择,自定义指令适合复用,而原生事件更适合简单场景。

标签: vue
分享给朋友:

相关文章

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue实现音乐

vue实现音乐

Vue实现音乐播放功能 使用Vue实现音乐播放功能可以通过多种方式完成,以下是几种常见的实现方法: 使用HTML5 Audio API 在Vue组件中直接使用HTML5的Audio对象来控制音乐播放…

vue日历实现

vue日历实现

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构。一个典型的日历包含星期标题和日期格子,可以通过v-for循环生成。月份切换功能通过计算属性动态更新日期数组。 <templat…

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…