当前位置:首页 > uni-app

uniapp左滑窗口

2026-03-05 12:31:45uni-app

左滑窗口实现方法

在UniApp中实现左滑窗口效果,通常可以通过以下两种方式实现:

方式一:使用<swipe-action>组件

uniapp左滑窗口

UniApp官方提供了<swipe-action>组件,专门用于实现滑动操作:

uniapp左滑窗口

<template>
  <view>
    <swipe-action>
      <swipe-action-item :options="options" @click="handleClick">
        <view class="content">滑动我试试</view>
      </swipe-action-item>
    </swipe-action>
  </view>
</template>

<script>
export default {
  data() {
    return {
      options: [
        {
          text: '删除',
          style: {
            backgroundColor: '#dd524d'
          }
        },
        {
          text: '收藏',
          style: {
            backgroundColor: '#007aff'
          }
        }
      ]
    }
  },
  methods: {
    handleClick(e) {
      console.log('点击了按钮', e.index)
    }
  }
}
</script>

方式二:自定义滑动效果

通过touch事件和CSS动画实现自定义滑动:

<template>
  <view class="swipe-container" 
        @touchstart="touchStart" 
        @touchmove="touchMove" 
        @touchend="touchEnd">
    <view class="content" :style="{transform: `translateX(${translateX}px)`}">
      可滑动内容
    </view>
    <view class="actions">
      <view class="action-btn" @click="handleAction(1)">按钮1</view>
      <view class="action-btn" @click="handleAction(2)">按钮2</view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      startX: 0,
      translateX: 0,
      maxTranslate: -120
    }
  },
  methods: {
    touchStart(e) {
      this.startX = e.touches[0].clientX
    },
    touchMove(e) {
      const moveX = e.touches[0].clientX - this.startX
      if (moveX < 0) {
        this.translateX = Math.max(moveX, this.maxTranslate)
      }
    },
    touchEnd() {
      if (this.translateX < this.maxTranslate / 2) {
        this.translateX = this.maxTranslate
      } else {
        this.translateX = 0
      }
    },
    handleAction(type) {
      console.log('执行操作', type)
      this.translateX = 0
    }
  }
}
</script>

<style>
.swipe-container {
  position: relative;
  overflow: hidden;
}
.content {
  width: 100%;
  height: 100px;
  background: #fff;
  transition: transform 0.3s;
  z-index: 2;
}
.actions {
  position: absolute;
  right: 0;
  top: 0;
  height: 100px;
  display: flex;
}
.action-btn {
  width: 60px;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #007aff;
  color: white;
}
</style>

注意事项

  1. 在iOS平台上可能需要额外处理滚动冲突问题
  2. 自定义实现时要注意性能优化,避免频繁的DOM操作
  3. 滑动操作的触发阈值需要根据实际体验调整
  4. 考虑添加动画过渡效果提升用户体验

两种方式各有优劣,官方组件使用简单但自定义程度低,自定义实现灵活性高但需要更多开发工作。

标签: 窗口uniapp
分享给朋友:

相关文章

uniapp教程

uniapp教程

uniapp 基础介绍 uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App、快应用等)。其核心优势在于代码复用率高,学习成本低,适合快速构建多…

uniapp实名认证

uniapp实名认证

uniapp实名认证实现方法 使用uniCloud实名认证插件 uniapp官方提供了uniCloud的实名认证插件,可快速集成到项目中。插件支持身份证识别、活体检测等功能,需在uniCloud控制台…

uniapp分享到facebook

uniapp分享到facebook

使用uniapp分享到Facebook的方法 在uniapp中实现分享到Facebook功能,可以通过调用原生插件或使用第三方SDK。以下是具体实现方式: 安装Facebook SDK插件 在un…

uniapp悬浮

uniapp悬浮

实现悬浮效果的方法 在UniApp中实现悬浮效果可以通过CSS的position: fixed或position: sticky属性结合动态样式控制来实现。以下是具体实现方式: 使用CSS固…

uniapp yuv

uniapp yuv

YUV 格式在 UniApp 中的应用 在 UniApp 中处理 YUV 格式数据通常涉及视频编解码、图像处理或摄像头数据采集。YUV 是一种颜色编码系统,常用于视频传输和图像处理,与 RGB 格式相…

uniapp 数据

uniapp 数据

uniapp 数据管理方法 本地存储 使用 uni.setStorageSync 和 uni.getStorageSync 进行本地数据持久化存储。适合保存用户偏好设置或小型数据。 // 存储数…