当前位置:首页 > VUE

vue 实现左滑删除

2026-01-22 03:38:04VUE

Vue 实现左滑删除功能

左滑删除是移动端常见的交互方式,可以通过 Vue 结合 CSS 和手势事件实现。以下是两种常见的实现方法:

使用 CSS 过渡和 touch 事件

通过监听 touch 事件计算滑动距离,结合 CSS 过渡效果实现左滑动画。

vue 实现左滑删除

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

<script>
export default {
  data() {
    return {
      startX: 0,
      moveX: 0,
      offsetX: 0
    }
  },
  methods: {
    handleTouchStart(e) {
      this.startX = e.touches[0].clientX
    },
    handleTouchMove(e) {
      this.moveX = e.touches[0].clientX
      this.offsetX = this.moveX - this.startX

      if (this.offsetX < 0 && this.offsetX > -100) {
        e.currentTarget.style.transform = `translateX(${this.offsetX}px)`
      }
    },
    handleTouchEnd(e) {
      if (this.offsetX < -50) {
        e.currentTarget.style.transform = 'translateX(-100px)'
      } else {
        e.currentTarget.style.transform = 'translateX(0)'
      }
    },
    handleDelete() {
      // 删除逻辑
    }
  }
}
</script>

<style>
.list-item {
  position: relative;
  width: 100%;
  height: 60px;
  overflow: hidden;
  transition: transform 0.3s ease;
}

.content {
  position: absolute;
  width: 100%;
  height: 100%;
  background: #fff;
  z-index: 1;
}

.delete-btn {
  position: absolute;
  right: 0;
  width: 100px;
  height: 100%;
  background: red;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 0;
}
</style>

使用第三方库(如 vue-touch)

vue-touch 库封装了 Hammer.js 的手势识别功能,可以更方便地实现滑动操作。

vue 实现左滑删除

安装依赖:

npm install vue-touch@next hammerjs

实现代码:

<template>
  <v-touch @swipeleft="onSwipeLeft" @swiperight="onSwipeRight">
    <div class="item" :style="{transform: `translateX(${offsetX}px)`}">
      <div class="content">滑动我</div>
      <div class="delete-btn" @click="deleteItem">删除</div>
    </div>
  </v-touch>
</template>

<script>
import { VueTouch } from 'vue-touch'

export default {
  components: {
    'v-touch': VueTouch
  },
  data() {
    return {
      offsetX: 0
    }
  },
  methods: {
    onSwipeLeft() {
      this.offsetX = -100
    },
    onSwipeRight() {
      this.offsetX = 0
    },
    deleteItem() {
      // 删除逻辑
    }
  }
}
</script>

<style>
.item {
  display: flex;
  position: relative;
  width: 100%;
  height: 60px;
  transition: transform 0.3s;
}

.content {
  flex: 1;
  background: #fff;
}

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

实现注意事项

  • 滑动距离阈值需要合理设置,通常 50-100px 触发删除按钮显示
  • 添加过渡动画提升用户体验
  • 移动端需要考虑 touch 事件兼容性
  • 列表项需要设置 overflow: hidden 防止内容溢出
  • 删除操作需要添加确认机制防止误触

这两种方法都能实现左滑删除功能,第一种更轻量但需要手动处理 touch 事件,第二种使用现成库更简便但会增加包体积。根据项目需求选择合适方案。

标签: vue
分享给朋友:

相关文章

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标签…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些方…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue实现爬虫

vue实现爬虫

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