当前位置:首页 > uni-app

uniapp左滑窗口

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

左滑窗口实现方法

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

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

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

<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动画实现自定义滑动:

uniapp左滑窗口

<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
分享给朋友:

相关文章

vue实现dialog窗口

vue实现dialog窗口

Vue 实现 Dialog 窗口的方法 使用组件化方式实现 Dialog 在 Vue 中可以通过组件化方式实现 Dialog 窗口。创建一个可复用的 Dialog 组件,利用 v-model 控制显示…

uniapp实现懒加载

uniapp实现懒加载

uniapp实现懒加载的方法 在uniapp中实现懒加载可以通过多种方式,以下是几种常见的方法: 使用uni.lazyLoad组件 uniapp提供了内置的懒加载组件,适用于图片等资源的懒加载。在页…

uniapp实现标题栏渐变

uniapp实现标题栏渐变

实现标题栏渐变的方法 在UniApp中实现标题栏渐变效果,可以通过修改页面的导航栏样式或使用自定义导航栏来实现。以下是几种常见的方法: 方法一:使用原生导航栏渐变 通过修改pages.json中的…

uniapp get

uniapp get

uniapp 获取数据的方法 在 uniapp 中获取数据可以通过多种方式实现,包括 API 请求、本地存储、页面传参等。以下是一些常见的方法: API 请求获取数据 使用 uni.request…

uniapp审批

uniapp审批

uniapp审批流程实现 在uniapp中实现审批功能,通常需要结合前端界面和后端逻辑。以下是几种常见的实现方式: 前端界面设计 使用uniapp的组件和API构建审批界面,包括表单提交、审批列表展…

投票 uniapp

投票 uniapp

uniapp 投票功能实现 uniapp 是一个基于 Vue.js 的跨平台开发框架,可以用于开发微信小程序、H5、App 等多种应用。实现投票功能需要结合前端界面和后端数据处理。 前端界面设计 使…