当前位置:首页 > 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 element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue搜索实现

vue搜索实现

Vue 搜索功能实现方法 基于计算属性的搜索 在 Vue 中可以通过计算属性实现简单的搜索功能。这种方式适合小型数据集,利用 JavaScript 的 filter 方法进行筛选。 data() {…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件:…

vue博客实现

vue博客实现

Vue 博客实现步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装基础依赖如 vue-router 和状态管理库(如 pinia)。配置路由文件实现页面跳转逻辑,例如博客首…