微信小程序-骚操作,自定义授权对话框,且遮盖层遮住tabBar

本文介绍如何在微信小程序中实现自定义授权对话框,并使用遮盖层覆盖原生tabBar。当需要用户授权时,通过隐藏tabBar,用图片占位并调整位置,创建类似原生的授权体验。文章讨论了实现过程中的问题及解决方案,探讨了更优的遮盖层和自定义tabBar高度的兼容性方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首发帖, 若有不足或错误或更优的方式,请指出,感谢

假设场景

当用户进入小程序之后, 需要在获取到头像昵称等相关信息授权之后才允许他进行其它交互操作;

由于微信小程序升级之后, 直接调用 wx.authorize({scope: "scope.userInfo"}),无法再弹出授权窗口;

需要变相使用 <button open-type="getUserInfo"/>来引导用户进行基本信息授权操作,

如自定义带遮盖层的对话框来引导用户授权信息, 如这样(请自动忽略打码部分)

图中的确定按钮,即为 <button open-type="getUserInfo"/>, 点击后为下图

实现思路

我们知道, 微信小程序原生的tabbar只提供了wx.hideTabBar wx.showTabBar来控制其隐藏或显示, 而原生tabbar的层级总是在最顶层, 若tabbar处于显示状态, 那么自定义的遮盖层是无法遮挡挡它的

因此我的想法是用wx.hideTabBar在app的onLauch中先隐藏掉tabbar导航栏, 再使用一张与导航栏相同的图片占用导航栏的空位, 并置于遮盖层下层层级, 且随着遮盖层一起显示与隐藏

实现要点

刚开始,我以为直接把占位的tabbar图片fixed后设置bottom为0就可以解决了, 虽然开发工具上没有任何问题, 但是真机效果是这样(iphone X):

也就是说,真机中tabbar的位置并非是位于整个页面的最底部

于是我换了一种思路,通过微信小程序的wepy.getSystemInfoSync()来获取屏幕实际高度screenHeight, 通过 query.select('#fake-tabbar').boundingClientRect();query.exec(function(res) {}) 来获得之前设置高度为xx rpx的tabbar图片所在节点实际渲染出的高度; 两者相减后的差值,即为动态设置的占位tabbar图片的top值;

需要注意的地方: 占位tabbar 图片应该为两张, 一张为底图,一张为tabbar图, 如下:

底图位置与tabbar图的位置一致并位于它的下方, 为防止遇上像iphoneX 这样的长屏手机底端因tabbar高度不够出现缝隙, 故打底的这张背景图的高度稍微设置高一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值