微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。
一、前言
大家好!我是 是江迪呀。我们在进行微信小程序开发时,常常需要自定义一些东西,比如自定义顶部导航、自定义底部导航等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型,来给大家介绍下微信小程序如何获取自定义内容的位置信息。
二、开启自定义
如果需要自定义顶部和底部导航。那么如何在自定义后能够适配不同的机型而不会出现样式问题呢?我们可以通过wx.getSystemInfo({})
方法来获取页面的信息来保证样式的正确性。此方法常用于app.js
文件中的onLanch()
方法中,保证这些信息优先被加载,并把获取到的页面信息放到全局变量中,方便其他页面的获取使用。
在此之前需要开启自定义顶部和底部导航栏。如下所示:
{"pages": ["pages/index/index","pages/index2/index2" ],//自定义顶部导航 "navigationStyle": "custom","window": {"navigationStyle": "custom","navigationBarTextStyle": "white","backgroundTextStyle": "light"},//自定义底部导航 "navigationStyle": "custom",这里注意在设置自定义底部导航栏时,list中至少包含两个页面"tabBar": {"custom": true,"list": [{"pagePath": "pages/index/index","text": "首页"},{"pagePath": "pages/index2/index2","text": "首页2"}]},"style": "v2","sitemapLocation": "sitemap.json"
}
2.1 整个页面
1.位置
2.如何获取
页面代码:
<view style="height: {{screenHeight}}px;background-color: aliceblue;">
</view>
页面js代码:
const app = getApp()
Page({data: {screenHeight: app.globalData.screenHeight,}
})
app.js文件代码:
onLaunch: function() {wx.getSystemInfo({success: e => {//获取整个页面的高度this.globalData.screenHeight = e.screenHeight;}},)}
2.1 状态栏
1.位置
状态栏就是手机最顶部显示时间、信号、电量等信息的区域。一般状态栏的信息我们不单独获取设置,因为顶部导航栏包含了状态栏。
2.如何获取
页面代码:
<!--index.wxml-->
<view style="height: {{screenHeight}}px;background-color: aliceblue;"><!--状态栏高度--><view style="height: {{statusBarHeight}}px;background-color: red;"></view>
</view>
页面js代码:
// index.js
const app = getApp()
Page({data: {screenHeight: app.globalData.screenHeight,statusBarHeight: app.globalData.statusBarHeight}
})
app.js文件代码:
onLaunch: function() {wx.getSystemInfo({success: e => {this.globalData.screenHeight = e.screenHeight;//获取状态栏的高度this.globalData.StatusBar = e.statusBarHeight;}},)}
2.2 顶部导航栏
1.位置
顶部导航栏的高度是包含胶囊体的。
2.如何获取
首先获取胶囊体的信息,如果不存在胶囊体,顶部导航栏高度
= 状态栏高度
+ 50
;如果存在顶部导航栏高度
= 胶囊体离页面顶部的距离
+ 胶囊体离页面底部的距离
- 状态栏高度
页面代码:
<view style="height: {{screenHeight}}px;background-color: aliceblue;"><!--顶部导航高度--><view style="height: {{customBar}}px;background-color: blue;"></view>
</view>
页面js代码:
const app = getApp()
Page({data: {screenHeight: app.globalData.screenHeight,customBar: app.globalData.CustomBar}
})
app.js代码:
// app.js
App({globalData:{},onLaunch: function() {wx.getSystemInfo({success: e => {let capsule = wx.getMenuButtonBoundingClientRect();if (capsule) {this.globalData.Custom = capsule;this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;} else {this.globalData.CustomBar = e.statusBarHeight + 50;}}},)}
})
2.4 内容区域
1.位置
如果你做的小程序没有底部导航栏
的话,那么内容区域
= 页面总高度
- 顶部导航栏高度
但是如果你需要底部导航的话那么内容区域
= 页面总高度
- 顶部导航栏高度
- 底部导航栏高度
2.如何获取
页面代码:
<view style="height:{{screenHeight}}px;width: 100%;background-color: rgb(255, 255, 255);"><!--顶部导航栏--><view class="" style="height: {{CustomBar}}px;background-color: blue;"></view><!--内容区域--><view class="" style="height: {{screenHeight - CustomBar}}px;background-color: black;"></view><!--内容区域 包含底部导航--><view class="" style="height: {{screenHeight - CustomBar - tabBarHeight}}px;background-color: black;"></view></view>
页面js代码:
const app = getApp()
Page({data: {screenHeight: app.globalData.screenHeight,CustomBar: app.globalData.CustomBar,tabBarHeight: app.globalData.tabBarHeight,}
})
app.js代码:
// app.js
App({globalData:{},onLaunch: function() {// 获取系统状态栏信息wx.getSystemInfo({success: e => {this.globalData.screenHeight = e.screenHeight;this.globalData.tabBarHeight = e.screenHeight - e.safeArea.bottom + 50let capsule = wx.getMenuButtonBoundingClientRect();if (capsule) {this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;} else {this.globalData.CustomBar = e.statusBarHeight + 50;}}},)}
})
2.3 底部导航栏
1.位置
2.如何获取
页面代码:
<view style="height: {{screenHeight}}px;background-color: aliceblue;"><!--顶部导航高度--><view style="height: {{customBar}}px;background-color: blue;"></view><!--内容高度 包含底部导航--><view style="height: {{screenHeight - customBar - tabBar}}px;background-color: black;"></view><!--底部导航高度--><view style="height: {{tabBarHeight}}px;background-color: red;"></view>
</view>
页面js代码:
const app = getApp()
Page({data: {screenHeight: app.globalData.screenHeight,statusBarHeight: app.globalData.statusBarHeight,customBar: app.globalData.CustomBar,tabBar: app.globalData.tabBarHeight,tabBarHeight: app.globalData.tabBarHeight}
})
app.js代码:
onLaunch: function() {wx.getSystemInfo({success: e => {this.globalData.screenHeight = e.screenHeight;this.globalData.tabBarHeight = e.screenHeight-e.safeArea.bottom + 50let capsule = wx.getMenuButtonBoundingClientRect();if (capsule) {this.globalData.Custom = capsule;this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;} else {this.globalData.CustomBar = e.statusBarHeight + 50;}}},)}
这个底部导航栏之所以+50,我是从小程序框架中获取的,可以直接拿来用。
三、胶囊体
3.1 什么是胶囊体?
我们再做自定义顶部导航时,在一些场景下需要在导航中设置返回按钮以及其他信息:
这些按钮和信息需要和胶囊体对齐才完美,所以我们需要获取到胶囊体
的位置信息。
3.2 如何获取?
// app.js
App({globalData:{},onLaunch: function() {// 获取系统状态栏信息wx.getSystemInfo({success: e => {//胶囊体距离顶部距离this.globalData.capsuleTop = wx.getMenuButtonBoundingClientRect().top;//胶囊体的高度this.globalData.capsuleHeight = wx.getMenuButtonBoundingClientRect().height;//胶囊体的宽度this.globalData.capsuleWidth = wx.getMenuButtonBoundingClientRect().width;}},wx.onKeyboardHeightChange((res) => {console.log('键盘高度111111:', res.height)wx.setStorageSync('keyBordHeight', res.height)}))}
})
相关文章:

微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。
一、前言 大家好!我是 是江迪呀。我们在进行微信小程序开发时,常常需要自定义一些东西,比如自定义顶部导航、自定义底部导航等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型&#x…...

快速吃透π型滤波电路-LC-RC滤波器
π型滤波器简介 π型滤波器包括两个电容器和一个电感器,它的输入和输出都呈低阻抗。π型滤波有RC和LC两种, 在输出电流不大的情况下用RC,R的取值不能太大,一般几个至几十欧姆,其优点是成本低。其缺点是电阻要消耗一些…...

聊聊混沌工程
这是鼎叔的第五十四篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。混沌工程是一门新兴学科,它不仅仅只是个技术活动,还包含如何设计能够持续协作的…...

做为骨干网络的分类模型的预训代码安装配置简单记录
一、安装配置环境 1、准备工作 代码地址 GitHub - bubbliiiing/classification-pytorch: 这是各个主干网络分类模型的源码,可以用于训练自己的分类模型。 # 创建环境 conda create -n ptorch1_2_0 python3.6 # 然后启动 conda install pytorch1.2.0 torchvision…...

网络协议(九):应用层(域名、DNS、DHCP)
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...

有趣的小知识(三)提升网站速度的秘诀:掌握缓存基础,让你的网站秒开
像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造成关系型数据库的瘫痪,随着缓存技术的出现很好的解决了这个问题。 一、缓存的概念(什么是缓存…...

SpringCloud之服务拆分和实现远程调用案例
服务拆分对单体架构项目来说:简单方便,高度耦合,扩展性差,适合小型项目。而对于分布式架构来说:低耦合,扩展性好,但架构复杂,难度大。微服务就是一种良好的分布式架构方案࿱…...
mybatis: Invalid bound statement (not found): com.atguigu.dao.UserDao.save
问题描述: 1 问题实质: dao层(又叫mapper接口)跟mapper.xml文件没有映射 2 问题原因: 出现这种映射问题的原因分为低级原因和更低级原因两种 更低级原因: (1)dao层的方法和mapper.xml中的方法不一样; (2)mapper中的namespace 值 和对应的dao层entity层不一致 &…...

JavaScript 代码规范
所有的 JavaScript 项目适用同一种规范。JavaScript 代码规范代码规范通常包括以下几个方面:变量和函数的命名规则空格,缩进,注释的使用规则。其他常用规范……规范的代码可以更易于阅读与维护。代码规范一般在开发前规定,可以跟你的团队成员…...

6综合项目 旅游网 【6.我的收藏和收藏排行榜】
我的收藏分析先登录→拿到当前登录的用户信息,从数据库中获取uid和对应uid的rid集合→将rid集合信息展示到我的收藏前台代码判断用户是否登录,传递uid,通过uid查找其对应的rid集合当查询的属性涉及到多张表,则必须使用多表连接&am…...

openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法
文章目录openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法概述想出来一个变通的方法ENDopenpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法 概述 载入坐标文件后, 指定左下角远点坐标, 然后定位板子上的3个Mark点, 因为…...

借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险
来源:猛兽财经 作者:猛兽财经 C3.ai的股价 作为一家人工智能技术提供商,C3.ai(AI)的股价曾在2021年初随着炒作情绪的增加,达到了历史最高点,但自那以后其股价就下跌了90%,而且炒作情…...

蓝桥杯-数位排序
蓝桥杯-数位排序1、问题描述2、解题思路3、代码实现1、问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。 例如, 2022 排在 409 前面, 因为 2022 的数位…...
【ES实战】ES 插件包离线安装(本地文件)
ES 插件包离线安装(本地文件) 文章目录ES 插件包离线安装(本地文件)使用安装命令安装直接解压式验证安装情况常用的分词插件analysis-ik analysis-pinyin analysis-dynamic-synonym 在集群的节点上分发插件的ZIP安装包 使用安…...

Spring的核心基础——IOC与DI
文章目录一、Spring简介1 Spring介绍1.1 为什么要学1.2 学什么2 初识Spring2.1 Spring家族2.2 Spring发展史3 Spring体系结构3.1 Spring Framework系统架构图4 Spring核心概念问题导入4.1 核心概念二、IOC和DI入门1 IOC入门问题导入1.1 门案例思路分析1.2 实现步骤1.3 实现代码…...
C++正则表达式基础
文章目录1. 查找第一个匹配的2. 查找所有结果3. 打印匹配结果的上下文4. 使用子表达式5. 查找并替换注意: .(点)在括号中没有特殊含义,无需转义用\转义。 1. 查找第一个匹配的 #include <iostream> #include <regex>using names…...

如何在网络安全中使用人工智能并避免受困于此
人工智能在网络安全中的应用正在迅速增长,并对威胁检测、事件响应、欺诈检测和漏洞管理产生了重大影响。根据Juniper Research的一份报告,预计到2023年,使用人工智能进行欺诈检测和预防将为企业每年节省110亿美元。但是,如何将人工…...

生态 | 人大金仓与超聚变的多个产品完成兼容认证
近日,人大金仓与超聚变数字技术有限公司(简称“超聚变”)完成了多款产品的兼容互认测试。测试表明,人大金仓KingbaseES V8数据库与超聚变服务器操作系统FusionOS、超聚变FusionOne基础设施完全兼容,人大金仓异构数据同…...

4自由度串联机械臂按颜色分拣物品功能的实现
1. 功能说明 本实验要实现的功能是:将黑、白两种颜色的工件分别放置在传感器上时,机械臂会根据检测到的颜色,将工件搬运至写有相应颜色字样区域。 2. 使用样机 本实验使用的样机为4自由度串联机械臂。 3. 运动功能实现 3.1 电子硬件 在这个…...

玩转结构体---【C语言】
⛩️博主主页:威化小餅干📝系列专栏:【C语言】藏宝图🎏 ✨绳锯⽊断,⽔滴⽯穿!一个编程爱好者的学习记录!✨目录结构体类型的声明结构体成员访问结构体传参前言我们是否有想过,为什么会有结构体呢…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...