微信小程序自定义导航栏定位及胶囊按钮图解

在自定义小程序导航栏时,右上角的胶囊(MenuButton)在不同机型测试,会发现很难适配。

实测中 不同的手机,胶囊高度不一样、状态栏高度不一样。与模拟器显示的情况是不一样的。
由于小程序在不同的手机上顶部布局会发生变化,不能正确避开胶囊位置,所以通过官方给出的胶囊信息,可以计算出胶囊位置,完全需要根据手机,动态的计算高度。

演示:

图解胶囊按钮位置:

这是在没有设置自定义时的原生导航栏,我们发现整体的高度就是 (状态栏高度 + 导航栏高度)
而状态栏高度可以通过 wx.getSystemInfo()获取,现在就只用解决导航栏高度了

观察发现,胶囊顶部高度距导航栏顶部高度的高度差 和 胶囊底部高度距导航栏底部高度的高度差,是一样的
也就是说 导航栏高度 = 胶囊高度 +(高度差)x  2
而胶囊信息可以通过 wx.getMenuButtonBoundingClientRect() 获取,现在就只用解决高度差了
wx.getMenuButtonBoundingClientRect() 中也返回了胶囊顶部距屏幕顶部距离的信息(top)
所以知 **高度差 = 胶囊顶部距屏幕顶部距离 - 状态栏高度**  

重要事情说三遍
计算出来的值一定要用px,不要用rpx!
计算出来的值一定要用px,不要用rpx!!
计算出来的值一定要用px,不要用rpx!!!

这样我们可以定义一些全局变量

app.js代码:

App({onLaunch: function () {const systemInfo = wx.getSystemInfoSync(); //获取系统信息const menuInfo = wx.getMenuButtonBoundingClientRect(); // 获取胶囊按钮的信息this.globalData.menuHeight = menuInfo.height; // 获取胶囊按钮的高this.globalData.statusBarHeight = systemInfo.statusBarHeight; // 获取状态栏的高this.globalData.menuRight = menuInfo.right; // 获取胶囊按钮的距离屏幕最右边的距离(此处用于设置导航栏左侧距离屏幕的距离)this.globalData.navBarHeight = (menuInfo.top - systemInfo.statusBarHeight) * 2 + menuInfo.height; // 计算出导航栏的高度this.globalData.navBarBottom = this.globalData.navBarHeight + systemInfo.statusBarHeight;this.globalData.winHeight = systemInfo.windowHeight;this.autoUpdate();},globalData: {navBarHeight:0,// 导航栏高度navBarBottom: 0,//胶囊按钮底部位置menuHeight:0,//胶囊按钮 高度statusBarHeight:0,//状态栏高度menuRight:0,//胶囊按钮 距离屏幕右边的距离winHeight:0},
})
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁数据潜能:构建高效数据仓库的策略与实践

在数字化时代,数据已成为企业最宝贵的资产之一。然而,随着数据量的激增,企业面临着数据管理的诸多挑战。如何有效地利用这些数据,支持企业的决策和运营,成为每个企业都需要解答的问题。数据仓库的建设和数据的合理分层…

B1100 校庆

输入样例: 5 372928196906118710 610481197806202213 440684198612150417 13072819571002001X 150702193604190912 6 530125197901260019 150702193604190912 220221196701020034 610481197806202213 440684198612150417 370205198709275042 输出样例:…

LInux shell编程之基础语法

目录 1、shell概述 1.1、查看Linux 提供的 Shell 解析器 1.2、bash 和 sh 的关系 1.3、查看系统(centos)默认使用的解释器 2、脚本的基础使用 2.1、脚本的格式 2.2、脚本的执行方式 方式一:采用 bash / sh 脚本的相对路径或绝对路径…

Intel性能分析工具Vtune安装和使用简介

一、介绍 Intel Vtune profiler是用于串行和多线程应用程序的性能分析工具,可以帮助软件开发人员对应用程序的性能问题进行分析,支持包括linux和windows在内的多种操作系统。主要功能包括: 性能分析:可以对应用程序进行深入的性…

单片机入门还能从51开始吗?

选择从51单片机开始入门还是直接学习基于ARM核或RISC核的单片机,取决于学习目标、项目需求以及个人兴趣。每种单片机都有其特定的优势和应用场景,了解它们的特点可以帮助你做出更合适的选择。 首先,我们说一下51单片机的优势: 成熟…

网络安全:绕过 MSF 的一次渗透测试

这次渗透的主站是 一个 Discuz!3.4 的搭建 违法招 piao 网站, 配置有宝塔 WAF 用 Discuz!ML 3.X 的漏洞进行攻击,但是没有成功 发现主站外链会有一个发卡网,引导人们来这充值,是 某某发卡网,而且域名指向也是主站的 ip…

数据库服务的运行与登录

打开数据库服务 数据库服务: SQL Server(MSSQLServer) 运行在服务器端的应用程序, 提供数据的存储 / 处理和事务等在使用DBMS的客户端之前必须首先打开该服务 客户端连接到服务器 关于客户端 / 服务器端的说明 客户端 : 数据库管理系统(DBMS), 应用程序服务器端 : 安装的数据…

L1-8 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…

「不羁联盟/XDefiant」4月20号开启服务器测试,游戏预下载安装教程

XDefiant》开启Alpha测试,这是一款免费游玩的快节奏 FPS 竞技游戏,可选择特色阵营,搭配个性化的装备,体验 6v6 对抗或是线性游戏模式。高品质射击竞技端游XDefiant以6v6双边对抗为核心,对局模式分为区域与线性两大类&a…

视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式(RGB与YUV) 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一(冗余信息) 视频基础学习五——视频编码基础…

【智能算法】花朵授粉算法(FPA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年,Yang等人受到自然界花朵授粉过程启发,提出了鸭群算法(Flower Pollination Algorithm, FPA)。 2.算法原理 2.1算法思想 FPA基于自然界花朵授…

三步教你怎么把icloud照片恢复至iphone!

“我手机里面照片被优化后,然后不小心把所有被优化的模糊照片从手机中删除了,但是iCloud还有,我应该怎样把iCloud的照片重新放回手机?谢谢。” 在使用iPhone时,iCloud照片库是一个非常方便的功能,它允许你在…

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码,于是下载到本地。因为我习惯使用 pnpm,所以直接用 pnpm i 安装依赖,npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock,于是重新用 yarn install 安装依赖&…

使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像

使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像 文章目录 使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像一、前言二、具体步骤1、启动SD的api设置2、unity 创建生图脚本3、Unity 生图交互配置步骤 1: 创建sdControl步骤2:生成后图片画布步骤3&…

Groovy程序设计-【第一部分Groovy起步】-02-面向Java开发者的Groovy

前言: 知识点记录来源于【Groovy程序设计】一书中,本文仅作知识点记录供日后使用查询,不做教程使用。 groovy支持java语法,并且保留了java的语义,所以我们可以随心所欲的混用两种语言。 1.从Java到Groovy 先看一个…

从「宏大叙事」到「生活叙事」,小红书品牌种草的的“正确姿势”

不同于抖音和微博,在小红书上,品牌营销的基调应该是怎样的?品牌怎样与小红书用户对话?什么样的内容,才能走进小红书用户的心中?本期,小编将带大家洞察品牌在小红书营销的“正确姿势”。从「小美…

Table表格(关于个人介绍与图片)

展开行&#xff1a; <el-table :data"gainData" :border"gainParentBorder" style"width: 100%"><el-table-column type"expand"><template #default"props"><div m"4"><h3>工作经…

百度文心一言:官方开放API开发基础

目录 一、模型介绍 1.1主要预置模型介绍 1.2 计费单价 二、前置条件 2.1 创建应用获取 Access Key 与 Secret Key 2.2 设置Access Key 与 Secret Key 三、基于千帆SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 文心一言&#xff08;英文名&…

Java实现生成中间带图标的二维码

Java实现生成中间带图标的二维码 生成Base64格式的二维码&#xff0c;返回html渲染 package your.package;import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod…

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统 【中文名称】磷脂-聚乙二醇-磷酸三苯酯 【英文名称】DSPE-PEG-TPP 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20℃ 【规 格】50mg,…