当前位置:首页 > 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实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…