小程序阻止页面返回

1,304 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情 小程序虽然没有安卓语言强大,但是内容和api还是很丰富的。有一些不常用的api常常被我们忽略,我们一起看看吧~

wx.nextTick

延迟一部分操作到下一时间片执行(类似setTimeout)

tips: 对于不需要在一个同步流程内完成的逻辑,可以使用此接口延迟到下一个时间片再执行

背景:因为自定义组件中的 setData 和 triggerEvent 等接口是同步的操作,当被同时连续调用时,很有可能会因为处理不当而导致出错。

wx.getMenuButtonBoundingClientRect()

获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点

const res = wx.getMenuButtonBoundingClientRect()

console.log(res.width) // 宽度(px)
console.log(res.height)// 高度(px)
console.log(res.top) // 上边界坐标(px)
console.log(res.right) // 右边界坐标(px)
console.log(res.bottom)// 下边界坐标(px)
console.log(res.left) // 左边界坐标(px)

wx.hideHomeButton

隐藏返回首页按钮,当用户打开的小程序最底层页面是非首页时,默认展示“返回首页”按钮,开发者可在页面 onShow 中调用 hideHomeButton 进行隐藏。

wx.enableAlertBeforeUnload

开启小程序页面返回询问对话框。真机有效,开发者工具不生效。

弹窗生效的前提

  • 当前页面在小程序内非首页页面/最底层页
  • 官方导航栏上的的返回
  • 全屏模式下自绘返回键
  • android 系统 back 键时

tips

  • 手势滑动返回时拦截不生效
  • 此功能无法阻止用户退出小程序的行为
  • 需要配合wx.disableAlertBeforeUnload使用
  • 在onShow中调用该接口

wx.disableAlertBeforeUnload

关闭小程序页面返回询问对话框。 使用wx.enableAlertBeforeUnload的时候,需要配合在onUnload生命周期中,将弹框取消,否则会有问题。

代码如下

 /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.enable()();
  },
  /**
   * 生命周期函数--监听页面卸载
   */
 onUnload: function () {
    this.disable();
 },
 enable() {
    wx.enableAlertBeforeUnload({
      message: '离开此页后数据将会被清空哦~',
      success(res) {
        console.log('success:', res)
      },
      fail(res) {
        console.log('fail:', res)
      },
      complete(res) {
        console.log('complete:', res)
      }
    })
  },

  disable() {
    wx.disableAlertBeforeUnload({
      success(res) {
        console.log('success:', res)
      },
      fail(res) {
        console.log('fail:', res)
      },
      complete(res) {
        console.log('complete:', res)
      }
    })
  }

效果如下:

微信图片_20220816101334.jpg