当前位置:首页 > 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. 可以考虑添加触觉反馈(如震动)提升用户体验

优化版本

<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 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式的…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <tem…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &…

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(…