当前位置:首页 > VUE

vue 左滑实现删除

2026-02-22 19:17:49VUE

Vue 左滑删除实现方法

在 Vue 中实现左滑删除功能,可以通过结合手势事件和 CSS 动画来完成。以下是几种常见的实现方式:

使用 touch 事件监听

通过监听 touchstart、touchmove 和 touchend 事件来计算滑动距离:

vue  左滑实现删除

<template>
  <div class="list-item" 
       @touchstart="handleTouchStart"
       @touchmove="handleTouchMove"
       @touchend="handleTouchEnd">
    <div class="content">滑动我删除</div>
    <div class="delete-btn">删除</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      startX: 0,
      moveX: 0,
      isMoving: false
    }
  },
  methods: {
    handleTouchStart(e) {
      this.startX = e.touches[0].clientX
    },
    handleTouchMove(e) {
      this.moveX = e.touches[0].clientX - this.startX
      if (this.moveX < 0) {
        e.currentTarget.style.transform = `translateX(${this.moveX}px)`
      }
    },
    handleTouchEnd(e) {
      if (this.moveX < -50) {
        e.currentTarget.style.transform = 'translateX(-80px)'
      } else {
        e.currentTarget.style.transform = 'translateX(0)'
      }
    }
  }
}
</script>

使用 CSS transition 实现平滑动画

为滑动效果添加 CSS 过渡效果:

vue  左滑实现删除

.list-item {
  position: relative;
  overflow: hidden;
  transition: transform 0.3s ease;
}

.delete-btn {
  position: absolute;
  right: 0;
  top: 0;
  width: 80px;
  height: 100%;
  background: red;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}

使用第三方库

可以借助 vue-touch 或 hammer.js 等手势库简化实现:

import Hammer from 'hammerjs'

export default {
  mounted() {
    const hammer = new Hammer(this.$el)
    hammer.on('swipeleft', () => {
      this.$el.style.transform = 'translateX(-80px)'
    })
    hammer.on('swiperight', () => {
      this.$el.style.transform = 'translateX(0)'
    })
  }
}

完整组件示例

以下是一个完整的可复用左滑删除组件:

<template>
  <div class="swipe-container">
    <div class="swipe-content" :style="contentStyle" @click="handleClick">
      <slot></slot>
    </div>
    <div class="swipe-actions">
      <div class="swipe-delete" @click="handleDelete">删除</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      offsetX: 0,
      startX: 0
    }
  },
  computed: {
    contentStyle() {
      return {
        transform: `translateX(${this.offsetX}px)`
      }
    }
  },
  methods: {
    handleTouchStart(e) {
      this.startX = e.touches[0].clientX
    },
    handleTouchMove(e) {
      const currentX = e.touches[0].clientX
      this.offsetX = Math.min(0, currentX - this.startX)
    },
    handleTouchEnd() {
      if (this.offsetX < -50) {
        this.offsetX = -80
      } else {
        this.offsetX = 0
      }
    },
    handleDelete() {
      this.$emit('delete')
    },
    handleClick() {
      if (this.offsetX < 0) {
        this.offsetX = 0
      } else {
        this.$emit('click')
      }
    }
  }
}
</script>

<style>
.swipe-container {
  position: relative;
  overflow: hidden;
}

.swipe-content {
  transition: transform 0.3s ease;
  z-index: 1;
  background: white;
}

.swipe-actions {
  position: absolute;
  right: 0;
  top: 0;
  height: 100%;
  display: flex;
}

.swipe-delete {
  width: 80px;
  background: red;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

注意事项

  • 移动端开发需要添加 viewport meta 标签确保触摸事件正常工作
  • 滑动距离阈值可以根据实际需求调整
  • 考虑添加边界检查防止过度滑动
  • 删除操作建议添加确认提示防止误操作
  • 在列表中使用时需要注意每个项目的独立状态管理

以上方法可以根据项目需求选择使用原生事件监听或第三方库实现,CSS 过渡效果可以提升用户体验。

标签: vue
分享给朋友:

相关文章

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

vue实现刷卡

vue实现刷卡

Vue 实现刷卡效果 在 Vue 中实现刷卡效果可以通过 CSS 动画和 Vue 的过渡系统结合完成。以下是一种常见的实现方式: 基础实现方法 安装 Vue 过渡依赖(如果尚未安装): npm i…

vue实现爬虫

vue实现爬虫

Vue 实现爬虫的基本思路 Vue.js 本身是一个前端框架,主要用于构建用户界面。要实现爬虫功能,通常需要结合后端技术或浏览器自动化工具。以下是几种常见的方法: 方法一:Vue + Node.js…

vue框架实现

vue框架实现

Vue 框架实现方法 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。以下是一些核心实现方法,涵盖基本使用、组件化、状态管理和优化技巧。 基本项目搭建 使用 Vue CLI…