最近项目(uniapp+vue3)中,由于是离线存储,联网后需要同步到数据库,为了方便同步数据,我做了退出时提示的弹框,但是由于小程序左右滑动也容易退出当前页面/(ㄒoㄒ)/~~ ,我忘记考虑这点了,被测试狠狠提了个大bug,可把我琢磨坏了,好在还有各位亲爱的网友留下的宝贵经验,于是我找找找,终于在历经九九八十一难,我找到了下列可行的方法,感谢各位大佬,故此也分享一下我的经验。
方法1:uni.enableAlertBeforeUnload √ 或 wx.enableAlertBeforeUnload
onLoad((e) => {
uni.enableAlertBeforeUnload({
message: "返回上页时弹出对话框",
success: function (res) {
console.log("点击确认按钮了:", res);
},
fail: function (errMsg) {
console.log("点击取消按钮了:", errMsg);
},
})
})
这个方法即简洁又超级好用,加上后的效果类似于左右滑动后,会立即弹出弹框提示用户,点击确认按钮会直接退出页面,取消则会继续留在当前页面,不执行退出事件。但是好像自定义导航栏的返回按钮事件不能触发这个事件,由于项目中这个返回按钮我加了其他操作,所以没有认真去试验过,如果有试验过的大佬可以来分享一下经验哈~
方法2:page-container
这个方法不太适用我的需求,首先使用后的效果很奇怪,直接在外层添加page-container组件,会导致我页面原本的样式发生变化(自定义导航栏和主页面内容中间有个空白,不太好消除),其次用户第一次左右滑动确实未直接退出,而是用户第二次滑动后才直接退出的,这个效果是没有问题的,但是和我的需求不是很符合。第一次滑动后,像我直接将page-container包裹在所有代码的最外层,会出现不可复原的白屏,应该是不能直接作为最外层的包裹容器的吧,由于效果不符合,我这边就没有继续测试啦。 但是在作者奥特曼和陈同学cs的两篇文中,一个是作为外层容器,一个是作为页面内部的组件使用,家人们需要这种效果的,可以对应尝试一下。 测试代码可以详看两位作者的文章哦,文章附在下方啦。
方法3:监听左右滑动的事件(超级不好用)
第一次尝试的方法,这个方法只有用户在屏幕上左右滑动距离大会触发,这里的左右滑动是指用户手指在屏幕上的滑动,跟返回的左右滑动还完全不一样,压根就很难触发,超级不好用,也无效,如果有试验成功的人可以告知我咋用,具体代码可参照TechWhiz-晓同作者的文章。
参考:
实现这个功能,我主要参考了以下的文章,有需要的可以自取:
奥特曼:微信小程序阻止页面返回(包滑动、自动返回键)_wx.enablealertbeforeunload-CSDN博客
陈同学cs:小程序阻止手机自带的滑动返回退出事件(uni-app,微信小程序,page-container)_uniapp page-container-CSDN博客
雨润田上:微信小程序使用page-container实现滑动返回拦截与二次确认最近开发小程序期间,有一个较大的表单页面,用户编辑期 - 掘金 (juejin.cn) 梅先森森森森森森:微信小程序 / UNIAPP --- 阻止小程序返回(顶部导航栏返回、左 / 右滑手势、安卓物理返回键和调用 navigateBack 接口) - 简书 (jianshu.com) TechWhiz-晓同:uniApp监听左右滑动事件_uniapp右滑事件-CSDN博客