微信小程序自定义导航栏兼容适配所有机型

简介: 微信小程序自定义导航栏兼容适配所有机型

目前小程序已在前端占了一席之地,最近公司项目上用的就是小程序开发,由于功能及页面不是很多,所以直接原生开发,毕竟坑可能会少点,在开发过程中,小程序自带导航栏和客户的设计稿导航栏排在一起,感觉很别扭,因此要求去掉微信的自带导航栏,微信提供了这方面的api,接下来我们就实操。


image.png

添加描述

这是小程序官方文档截图,可以看到导航栏样式支持两种,默认是带导航栏,另外一种是自定义导航栏-custom,如果使用自定义导航栏,我们可以

全局配置

//app.json"window":{"navigationStyle":"custom"}

单页面配置

//page.json{"navigationStyle":"custom"}

效果对比

image.png

添加描述

能明显的看出来,自定义导航栏页面内容已经顶到屏幕顶端,除了胶囊按钮,其他都是页面可控区域。每个手机的屏幕都不一样,各家系统的状态栏高度也不一样,因此,我们在开发页面时要考虑屏幕的适配,有刘海的,要留出刘海的距离,没有的,要把状态栏高度留出来。

1.获取导航栏高度及按钮位置

微信提供了获取导航栏高度的Api和胶囊按钮位置的Api

// 系统信息const systemInfo = wx.getSystemInfoSync();// 胶囊按钮位置信息const menuButtonInfo = wx.getMenuButtonBoundingClientRect();

在控制台打印出这两个Api返回结果

image.png

添加描述

这里面我们只说几个我们接下来用到的参数。

statusBarHeight     // 状态栏高度screenWidth         // 胶囊的宽度 top                 // 胶囊到顶部距离height              // 胶囊的高度right               // 胶囊距离右边的距离

通过这几个参数,我们可以计算出状态栏的高度,微信胶囊所占的高度(存在padding值,可以使元素和胶囊纵向居中)

首先在app.js中定义全局data-globalData

globalData:{    navBarHeight:0,     // 导航栏高度    menuBotton:0,       // 胶囊距底部间距(保持底部间距一致)    menuRight:0,        // 胶囊距右方间距(方保持左、右间距一致)    menuHeight:0,       // 胶囊高度(自定义内容可与胶囊高度保证一致)},

新建个方法

setNavBarInfo(){    // 获取系统信息    const systemInfo = wx.getSystemInfoSync();    // 胶囊按钮位置信息    const menuButtonInfo = wx.getMenuButtonBoundingClientRect();    // 导航栏高度 = 状态栏到胶囊的间距(胶囊距上距离-状态栏高度) * 2 + 胶囊高度 + 状态栏高度    this.globalData.navBarHeight =(menuButtonInfo.top - systemInfo.statusBarHeight)*2+ menuButtonInfo.height + systemInfo.statusBarHeight;    this.globalData.menuBotton = menuButtonInfo.top - systemInfo.statusBarHeight;    this.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right;    this.globalData.menuHeight = menuButtonInfo.right;}

在onLaunch中调用,因为我这个项目是所有的导航都不用微信自带的,所以在app.js

中调用及设置data。

onLaunch(){    this.setNavBarInfo()},

到这里所需要用到的都已经存了起来,页面用法也比较简单,排除状态栏的高度,设置导航栏的高度和胶囊高度保持,用flex布局。

2.页面适配

首先page.js中定义变量

var app =getApp()Page({  /**    * 页面的初始数据    */  data:{    navBarHeight: app.globalData.navBarHeight,//导航栏高度    menuBotton: app.globalData.menuBotton,//导航栏距离顶部距离    menuRight: app.globalData.menuRight,//导航栏距离右侧距离    menuHeight: app.globalData.menuHeight,//导航栏高度  }})

页面使用

<view class="nav" style="height:{{navBarHeight}}px;"><view class="nav-main"><!-- 胶囊区域 --><view    class="capsule-box"  style="style="height:{{menuHeight+menuBotton*2}}px; min-height:{{menuHeight}}px; line-height:{{menuHeight}}px; bottom:0px;padding:0{{menuRight}}px;"><!-- 导航内容区域 -->  <slot></slot></view></view></view>

wxss

/* 公共导航 */.nav {  position: fixed;  top:0;  left:0;  box-sizing: border-box;  width: 100vw;  z-index:1000;}.nav-main {  width:100%;  height:100%;  box-sizing: border-box;  position: relative;}.nav .capsule-box {  position: absolute;  box-sizing: border-box;  width:100%;  display: flex;  align-items: center;}

最终效果

image.png

添加描述

此种适配方案适应所有手机,应该说是最优的选择。

相关文章
|
存储 JavaScript 前端开发
【前端系列】- 富文本组件(mavon-editor)
mavon-editor是一款基于vue的markdown编辑器,可以用来做文本的编辑,比如是某种业务需要发送公告、个人博客等,都可以用到,操作也十分简单。
4911 0
【前端系列】- 富文本组件(mavon-editor)
|
小程序 开发者
小程序顶部自定义导航栏添加背景图的实现
小程序顶部自定义导航栏添加背景图的实现
519 0
|
10月前
|
存储 缓存 监控
解读HTTP请求头参数
简而言之,HTTP请求头是Web通信机制的基石之一,为服务端和客户端之间提供了灵活而强大的数据交换手段。掌握它们的使用,不仅可以加深对Web工作原理的理解,更能在实际开发中发挥出它们的最大潜能。
1230 7
|
API 数据安全/隐私保护 计算机视觉
python-opencv表格识别
python-opencv表格识别
1621 0
|
存储 编解码 前端开发
阿里云服务器2核4G、4核8G、8核16G选择经济型、通用算力型和计算型选择参考
如果我们想购买的云服务器配置是2核4G、4核8G、8核16G配置,目前在阿里云的活动中,可选的实例规格除了轻量应用服务器之外,有经济型e、通用算力型u1、计算型c7、计算型c8y等几个实例规格可选,由于不同实例规格的性能和价格及适用场景不同,因此,有的新手用户可能不知道如何选择,本文将讨论在2核4G、4核8G、8核16G配置下,如何选择经济型、通用算力型和计算型实例,以供参考。
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
1463 0
|
监控
DDN是什么,DDN专线的优势详解
数字数据产品是基于数字数据网(Digital Data Network,简称DDN),利用数字信道提供永久性或半永久性连接电路来传输数据信号的服务。
1151 0
|
小程序
【微信小程序】-- 全局配置 -- tabBar(十七)
【微信小程序】-- 全局配置 -- tabBar(十七)
【微信小程序】-- 全局配置 -- tabBar(十七)
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
568 0
|
前端开发 JavaScript 开发者
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
本文提供了一个前端JS按钮点击事件、弹出式窗口和遮罩层的实战示例,包括HTML、CSS和JavaScript的具体实现代码,以及功能解析,演示了如何实现按钮点击后触发弹窗显示和遮罩层,并在2秒后自动关闭或点击遮罩层关闭弹窗的效果。
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例

热门文章

最新文章