微信小程序胶囊布局位置信息的精准测量与自定义导航栏高度计算实践

1. 为什么你需要自己动手量“胶囊”?

做微信小程序开发,特别是想搞点个性化UI的,肯定都遇到过官方导航栏的“限制”。默认的那个导航栏,颜色、样式都改不了,想做个沉浸式体验,或者把品牌色融进去,基本没戏。所以,很多开发者,包括我自己,都会选择自己动手,丰衣足食——搞一个自定义导航栏。

但这事儿说起来简单,做起来第一个坑就来了:导航栏该做多高?你可能会想,不就一个固定的高度值吗?还真不是。不同手机型号的状态栏高度不一样,iPhone的“刘海”、安卓的“水滴屏”或者各种挖孔屏,状态栏高度都可能有差异。更重要的是,在微信小程序里,页面右上角那个著名的“胶囊按钮”(就是三个点那个菜单),它的位置是固定的吗?它的高度是多少?我们自定义的导航栏,必须完美地“包裹”住这个胶囊,既不能挡住它,也不能留出难看的空白。

这时候,你就需要一个精准的“尺子”去测量。微信官方提供了一个非常关键的API:wx.getMenuButtonBoundingClientRect()。这个方法返回的就是胶囊按钮的布局位置信息。听起来很美好,对吧?但实际用起来,我发现很多新手开发者,甚至一些有经验的,对这个API返回的几个值具体代表什么,心里是有点懵的。leftrighttopbottomwidthheight,这六个值,到底是以谁为参照物?量的是哪到哪?

我刚开始用的时候也迷糊,照着网上一些代码抄,结果在不同机型上导航栏高度计算总是有偏差,要么胶囊露出来一截,要么导航栏把胶囊给盖住了,体验非常糟糕。后来我决定自己动手,在真机上反复测试、画图对比,才彻底搞明白这几个值的含义。今天,我就把我踩过的坑和总结出的实践经验,用最直白的话分享给你,保证你看完就能自己精准算出任何机型下的自定义导航栏高度,特别是在uni-app这种跨端框架里,也能游刃有余。

2. 拆解胶囊位置信息:每个值到底指哪里?

官方文档对 wx.getMenuButtonBoundingClientRect() 的描述比较简洁,它返回一个对象,包含胶囊按钮的布局位置信息。但“布局位置”这个词太抽象了,我们必须把它翻译成屏幕上实实在在的像素点。

为了让你看得更明白,我画个简单的示意图在脑子里(或者你拿张纸画一下):想象你的手机屏幕,最左上角的点是坐标原点 (0, 0)。横着向右是X轴正方向,竖着向下是Y轴正方向。胶囊按钮就在屏幕的右上角。

现在,我们来看这个API返回的六个属性,我结合自己的实测,一个一个给你解释清楚:

  • widthheight:这个最好理解,就是胶囊按钮本身的宽度和高度(单位是像素px)。在微信小程序基础库版本稳定后,这个值在不同机型上基本是固定的。你量一下,心里有个数就行,计算整体高度时主要用不到它俩,但做精细化UI布局时可能有用。
  • top:这是胶囊按钮的上边界,到屏幕顶部(也就是坐标原点Y=0的位置) 的垂直距离。注意,这个“屏幕顶部”是包含手机状态栏(显示时间、电量那一条)的。也就是说,top 的值,是从屏幕最顶上开始量的,一直量到胶囊的头顶。
  • bottom:这是胶囊按钮的下边界,到屏幕顶部(Y=0) 的垂直距离。同理,它也是从屏幕最顶上开始量的,一直量到胶囊的脚底。
  • left:这是胶囊按钮的左边界,到屏幕左侧(X=0) 的水平距离。这个值告诉你胶囊距离屏幕左边有多远。
  • right
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值