当前位置:首页 > 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 Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…