当前位置:首页 > VUE

vue 实现长按删除

2026-01-17 22:41:12VUE

实现长按删除功能

在Vue中实现长按删除功能可以通过监听touchstarttouchend事件,或者mousedownmouseup事件来实现。以下是具体实现方法:

方法一:使用事件监听

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

<script>
export default {
  data() {
    return {
      pressTimer: null
    }
  },
  methods: {
    startPress() {
      this.pressTimer = setTimeout(() => {
        this.deleteItem()
      }, 1000) // 1秒长按触发
    },
    endPress() {
      clearTimeout(this.pressTimer)
    },
    deleteItem() {
      // 执行删除操作
      console.log('删除操作')
    }
  }
}
</script>

方法二:使用自定义指令

可以创建一个自定义指令v-longpress来复用长按逻辑:

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

    const start = (e) => {
      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          binding.value()
        }, 1000)
      }
    }

    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)
  }
})

// 使用指令
<template>
  <button v-longpress="deleteItem">长按删除</button>
</template>

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

注意事项

  1. 移动端和PC端需要同时处理touchmouse事件
  2. 清除定时器时要确保所有可能的事件都处理了(如mouseleave
  3. 长按时间可以根据需求调整,通常1-2秒比较合适
  4. 可以考虑添加触觉反馈(如震动)提升用户体验

优化版本

vue 实现长按删除

<template>
  <div 
    @mousedown="startPress"
    @mouseup="cancelPress"
    @mouseleave="cancelPress"
    @touchstart="startPress"
    @touchend="cancelPress"
    @touchcancel="cancelPress"
  >
    {{ pressProgress }}%
  </div>
</template>

<script>
export default {
  data() {
    return {
      pressTimer: null,
      pressStartTime: 0,
      pressProgress: 0
    }
  },
  methods: {
    startPress() {
      this.pressStartTime = Date.now()
      this.pressTimer = setInterval(() => {
        const elapsed = Date.now() - this.pressStartTime
        this.pressProgress = Math.min(Math.floor(elapsed / 10), 100)
        if (elapsed >= 1000) {
          this.deleteItem()
          this.cancelPress()
        }
      }, 16)
    },
    cancelPress() {
      clearInterval(this.pressTimer)
      this.pressProgress = 0
    },
    deleteItem() {
      // 删除逻辑
    }
  }
}
</script>

这个优化版本添加了进度显示功能,让用户能看到长按的进度,提升交互体验。

标签: vue
分享给朋友:

相关文章

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…

vue如何实现登录

vue如何实现登录

实现登录功能的基本步骤 使用Vue实现登录功能通常需要结合后端API、状态管理以及路由控制。以下是常见的实现方式: 创建登录表单组件 在Vue组件中构建包含用户名和密码输入框的表单: <te…