当前位置:首页 > VUE

vue 实现长按

2026-02-10 11:32:16VUE

实现长按功能的思路

在 Vue 中实现长按功能,通常需要监听 mousedowntouchstart 事件,并在一定时间后触发长按回调。如果在时间到达前触发了 mouseuptouchend 事件,则取消长按。

vue 实现长按

使用自定义指令

Vue 的自定义指令是封装长按逻辑的常见方式:

vue 实现长按

Vue.directive('longpress', {
  bind(el, binding) {
    let pressTimer = null;

    const start = (e) => {
      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          binding.value();
        }, 1000); // 1秒触发长按
      }
    };

    const cancel = () => {
      if (pressTimer !== null) {
        clearTimeout(pressTimer);
        pressTimer = null;
      }
    };

    el.addEventListener('mousedown', start);
    el.addEventListener('touchstart', start);
    el.addEventListener('mouseup', cancel);
    el.addEventListener('mouseleave', cancel);
    el.addEventListener('touchend', cancel);
    el.addEventListener('touchcancel', cancel);
  }
});

在组件中使用

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

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

使用事件监听

如果不使用自定义指令,可以在组件内直接监听事件:

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

<script>
export default {
  data() {
    return {
      pressTimer: null
    };
  },
  methods: {
    startPress() {
      this.pressTimer = setTimeout(() => {
        console.log('长按触发');
      }, 1000);
    },
    cancelPress() {
      clearTimeout(this.pressTimer);
      this.pressTimer = null;
    }
  }
};
</script>

注意事项

  • 移动端需要同时监听 touchstarttouchend 事件。
  • 避免长按事件与点击事件冲突,可以在长按触发后阻止默认行为。
  • 长按时间可以根据需求调整,通常设置为 500ms 到 1s。

标签: vue
分享给朋友:

相关文章

vue实现头像剪切

vue实现头像剪切

Vue 实现头像剪切的实现方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 cropperjs 的 Vue 组件,专门用于图片裁剪。安装方式如下: npm inst…

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…