uni-app 左滑或右滑返回上一页面

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app 左滑或右滑返回上一页面

小白一枚。

想做一个简单的APP,就是有几个网页,打包成APP,但是左滑返回上一页面不知道怎么弄,谢谢各位大神。

3 回复

这个玩意儿自带


在uni-app中实现左滑或右滑返回上一页面的功能,通常需要结合页面滑动事件和路由跳转逻辑。我们可以使用onTouchStartonTouchMoveonTouchEnd事件来检测滑动方向和距离,然后根据结果决定是否执行返回操作。

以下是一个简单的实现案例:

  1. 在页面的<script>部分添加逻辑
export default {
  data() {
    return {
      startX: 0,
      startY: 0,
      endX: 0,
      endY: 0,
      swipeDirection: ''
    };
  },
  methods: {
    handleTouchStart(event) {
      this.startX = event.touches[0].clientX;
      this.startY = event.touches[0].clientY;
    },
    handleTouchMove(event) {
      this.endX = event.touches[0].clientX;
      this.endY = event.touches[0].clientY;
    },
    handleTouchEnd() {
      const deltaX = this.endX - this.startX;
      const deltaY = this.endY - this.startY;

      if (Math.abs(deltaX) > Math.abs(deltaY)) {
        if (deltaX > 0) {
          this.swipeDirection = 'left';
        } else {
          this.swipeDirection = 'right';
        }
        if (this.swipeDirection === 'left' || this.swipeDirection === 'right') {
          this.goBack();
        }
      }

      // 重置
      this.startX = 0;
      this.startY = 0;
      this.endX = 0;
      this.endY = 0;
      this.swipeDirection = '';
    },
    goBack() {
      uni.navigateBack({
        delta: 1
      });
    }
  },
  onReady() {
    // 绑定触摸事件
    this.$refs.swipeArea.addEventListener('touchstart', this.handleTouchStart);
    this.$refs.swipeArea.addEventListener('touchmove', this.handleTouchMove);
    this.$refs.swipeArea.addEventListener('touchend', this.handleTouchEnd);
  },
  onUnload() {
    // 移除触摸事件
    this.$refs.swipeArea.removeEventListener('touchstart', this.handleTouchStart);
    this.$refs.swipeArea.removeEventListener('touchmove', this.handleTouchMove);
    this.$refs.swipeArea.removeEventListener('touchend', this.handleTouchEnd);
  }
};
  1. 在页面的<template>部分添加触摸区域
<template>
  <view class="container" ref="swipeArea">
    <!-- 页面内容 -->
  </view>
</template>
  1. 在页面的<style>部分添加样式
<style>
.container {
  width: 100%;
  height: 100%;
  overflow: hidden;
  position: relative;
}
</style>

这个案例通过监听触摸事件来检测滑动方向,并在滑动结束时判断是否需要返回上一页面。注意,这里的$refs.swipeArea应该覆盖整个页面区域,以确保滑动事件能被正确捕获。此外,为了兼容不同设备,滑动距离的阈值可能需要进一步调整。

回到顶部