当前位置:首页 > VUE

vue 实现长按删除

2026-03-10 04:24:33VUE

实现长按删除功能

在Vue中实现长按删除功能,可以通过监听鼠标或触摸事件来实现。以下是两种常见的实现方式:

使用原生事件监听

通过@mousedown@mouseup@touchstart@touchend来检测长按动作。

<template>
  <div 
    @mousedown="startPress"
    @mouseup="endPress"
    @touchstart="startPress"
    @touchend="endPress"
  >
    长按我删除
  </div>
</template>

<script>
export default {
  data() {
    return {
      pressTimer: null,
      pressDuration: 1000 // 长按时间阈值,单位毫秒
    }
  },
  methods: {
    startPress(e) {
      this.pressTimer = setTimeout(() => {
        this.deleteItem()
      }, this.pressDuration)
    },
    endPress() {
      clearTimeout(this.pressTimer)
    },
    deleteItem() {
      // 执行删除逻辑
      console.log('删除操作')
    }
  }
}
</script>

使用自定义指令

封装一个v-longpress指令可以更方便地在多个地方复用。

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

    const start = (e) => {
      if (e.type === 'click' && e.button !== 0) return

      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          handler()
        }, duration)
      }
    }

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

    el.addEventListener('mousedown', start)
    el.addEventListener('touchstart', start)
    el.addEventListener('click', cancel)
    el.addEventListener('mouseout', cancel)
    el.addEventListener('touchend', cancel)
    el.addEventListener('touchcancel', cancel)
  }
})

使用自定义指令:

vue 实现长按删除

<template>
  <button v-longpress:1500="deleteItem">长按1.5秒删除</button>
</template>

<script>
export default {
  methods: {
    deleteItem() {
      // 删除逻辑
    }
  }
}
</script>

注意事项

  • 移动端需要同时处理touchstarttouchend事件
  • 适当设置长按时间阈值,通常500-2000毫秒比较合适
  • 需要考虑用户意外长按的情况,可以添加确认对话框
  • 在指令实现中,注意清理事件监听器防止内存泄漏

标签: vue
分享给朋友:

相关文章

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <ul&g…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…