uniapp 开发app端 页面弹窗中手势滑动关闭弹窗不返回上一页,监听返回上一页,手势侧滑关闭弹窗,弹窗中禁用系统手势侧滑,弹窗中自定义手势侧滑

场景:在app新增表单页面中,有下拉组件的弹窗,在弹窗页面使用手势滑动时,会直接返回到新增表单的上一个页面,预期效果是在弹窗弹出,手势滑动时关闭弹窗

开发步骤:首先判断手机系统为 Android 和 ios, 

ios系统

       在弹窗中禁用手势侧滑,并自定义手指滑动事件,判断是否关闭弹窗。(ios系统以6s测试机为例,只有从手机靠左侧往右滑动一定距离会触发返回),所以自定义手指滑动事件中,只判断从手机靠左侧往右侧滑动时才关闭弹窗

Android系统

       在新增表单页面的返回事件onBackPress(uniapp提供的函数,与onLoad、onShow同级别)中进行判断是否执行返回,判断弹窗打开就执行关闭弹窗的事件并禁止返回上一页,反之则执行默认事件返回上一页

效果图

下面 一、二 分别是ios和Android的开发思路和逻辑,Android ios两端完整代码

一:IOS 

操作步骤:表单页面打开弹窗时,在弹窗页面中禁用系统的手势侧滑,并自定义手势滑动关闭弹窗

1. 表单页面打开弹窗
<template>
  <view>
    <button @click="$refs.customPopup.open()">打开弹窗</button>
    <customPopup ref="customPopup" />
  </view>
</template>

<script>
import customPopup from "./custom-popup.vue";
export default {
  components: {
    customPopup,
  },
};
</script>

<style></style>
2. 弹窗页面打开时禁用系统的手势侧滑,关闭弹窗后开启手势侧滑 (要开启!!!),此时在弹窗页面左右滑动就没反应了
<template>
  <view class="mask" v-if="show"> 弹窗内容 </view>
</template>

<script>
export default {
  data() {
    return {
      show: false,
    };
  },
  methods: {
    open() {
      this.show = true;
      // #ifdef APP-PLUS
      // 获取当前页面的webview对象
      let currentWebview = this.$mp.page.$getAppWebview();
      // popGesture 字段用于控制 APP 端的手势侧滑返回功能 none:禁用 close:开启侧滑手势 hide:开启侧滑手势,但仅隐藏当前页面
      currentWebview.setStyle({ popGesture: "none" });
      // #endif
    },
    close() {
      this.show = false;
      // #ifdef APP-PLUS
      // 获取当前页面的webview对象
      let currentWebview = this.$mp.page.$getAppWebview();
      // 开启侧滑手势
      currentWebview.setStyle({ popGesture: "close" });
      // #endif
    },
  },
};
</script>

<style>
.mask {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  height: 100vh;
  width: 100vw;
  overflow: hidden;
  background-color: #fff;
  z-index: 999;
}
</style>

3. 自定义手势滑动事件,关闭弹窗
<template>
  <view
    class="mask"
    @touchstart="onTou
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值