场景:在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

最低0.47元/天 解锁文章
1044





