当前位置:首页 > VUE

vue实现长按删除

2026-03-29 09:33:22VUE

Vue 实现长按删除功能

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

使用原生事件监听

通过 setTimeoutclearTimeout 来检测长按时间。

vue实现长按删除

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

<script>
export default {
  data() {
    return {
      pressTimer: null,
      pressDuration: 1000, // 长按时间阈值(毫秒)
    };
  },
  methods: {
    startPress(e) {
      // 阻止默认行为,避免触发其他事件
      e.preventDefault();
      this.pressTimer = setTimeout(() => {
        this.deleteItem();
      }, this.pressDuration);
    },
    endPress() {
      clearTimeout(this.pressTimer);
    },
    deleteItem() {
      console.log("删除操作");
      // 执行删除逻辑
    },
  },
};
</script>

使用自定义指令

封装为自定义指令可以复用逻辑。

vue实现长按删除

// main.js 或单独指令文件
Vue.directive('longpress', {
  bind(el, binding) {
    let pressTimer = null;
    const pressDuration = binding.value || 1000;

    const startPress = (e) => {
      e.preventDefault();
      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          binding.value();
        }, pressDuration);
      }
    };

    const endPress = () => {
      clearTimeout(pressTimer);
      pressTimer = null;
    };

    el.addEventListener('touchstart', startPress);
    el.addEventListener('touchend', endPress);
    el.addEventListener('mousedown', startPress);
    el.addEventListener('mouseup', endPress);
  },
});

在组件中使用自定义指令:

<template>
  <div v-longpress="deleteItem">长按删除</div>
</template>

<script>
export default {
  methods: {
    deleteItem() {
      console.log("删除操作");
    },
  },
};
</script>

优化用户体验

可以添加视觉反馈,例如长按时改变元素样式。

<template>
  <div
    @touchstart="startPress"
    @touchend="endPress"
    @mousedown="startPress"
    @mouseup="endPress"
    :class="{ 'active': isPressing }"
  >
    长按删除
  </div>
</template>

<script>
export default {
  data() {
    return {
      isPressing: false,
      pressTimer: null,
    };
  },
  methods: {
    startPress() {
      this.isPressing = true;
      this.pressTimer = setTimeout(() => {
        this.deleteItem();
      }, 1000);
    },
    endPress() {
      this.isPressing = false;
      clearTimeout(this.pressTimer);
    },
  },
};
</script>

<style>
.active {
  background-color: #f0f0f0;
}
</style>

注意事项

  • 移动端和桌面端事件需要同时处理(touchstartmousedown)。
  • 清除定时器避免内存泄漏。
  • 根据需求调整长按时间阈值(默认 1000 毫秒)。

标签: vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…