当前位置:首页 > VUE

vue实现滑动删除组件

2026-01-21 14:37:12VUE

Vue 实现滑动删除组件的方法

滑动删除是移动端常见的交互模式,可以通过 Vue 实现一个可复用的组件。以下是实现的核心思路和代码示例:

基础结构设计

使用 Vue 的模板部分定义滑动区域和删除按钮:

<template>
  <div class="swipe-container">
    <div 
      class="swipe-content"
      @touchstart="handleTouchStart"
      @touchmove="handleTouchMove"
      @touchend="handleTouchEnd"
      :style="{ transform: `translateX(${offsetX}px)` }"
    >
      <!-- 主内容区域 -->
      <slot></slot>
    </div>
    <div class="swipe-action">
      <button @click="$emit('delete')">删除</button>
    </div>
  </div>
</template>

触摸事件处理

在脚本部分实现触摸逻辑:

<script>
export default {
  data() {
    return {
      startX: 0,
      offsetX: 0,
      isDragging: false
    }
  },
  methods: {
    handleTouchStart(e) {
      this.startX = e.touches[0].clientX
      this.isDragging = true
    },
    handleTouchMove(e) {
      if (!this.isDragging) return
      const currentX = e.touches[0].clientX
      const diff = currentX - this.startX

      // 限制向左滑动最大距离
      if (diff < 0) {
        this.offsetX = Math.max(diff, -100) // -100是最大滑动距离
      }
    },
    handleTouchEnd() {
      this.isDragging = false
      // 滑动超过阈值时保持打开状态
      if (this.offsetX < -50) {
        this.offsetX = -80 // 保持打开的位移量
      } else {
        this.offsetX = 0 // 恢复原位
      }
    }
  }
}
</script>

样式处理

添加必要的 CSS 样式:

<style scoped>
.swipe-container {
  position: relative;
  overflow: hidden;
  width: 100%;
}

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

.swipe-action {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  z-index: 1;
  width: 80px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #ff5252;
}
</style>

使用动画优化

可以添加过渡效果使滑动更流畅:

.swipe-content {
  will-change: transform;
  transition: transform 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);
}

组件使用示例

在父组件中这样使用:

vue实现滑动删除组件

<swipe-delete @delete="handleDelete">
  <div>可滑动删除的内容项</div>
</swipe-delete>

注意事项

  1. 移动端需要添加 touch-action: pan-y 样式防止浏览器默认行为干扰
  2. 考虑添加防抖处理避免快速滑动时的抖动
  3. 可以扩展支持右侧滑动操作
  4. 在列表中使用时需要注意每个项目的独立状态管理

这个实现包含了基本的滑动删除功能,可以根据实际需求进一步扩展和完善。

标签: 组件vue
分享给朋友:

相关文章

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果可以通过多种方式,以下是常用的组件和方法: Vue内置过渡组件 Vue提供了<transition>和<transition-group>组件,用于处理…

vue实现curd

vue实现curd

Vue实现CRUD操作 初始化Vue项目 使用Vue CLI创建新项目,安装必要依赖如axios用于HTTP请求 vue create crud-demo cd crud-demo npm inst…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScrip…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…

vue 实现vshow

vue 实现vshow

Vue 实现 v-show 在 Vue 中,v-show 是一个常用的指令,用于根据条件控制元素的显示或隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过 CSS 的 displ…

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…