这篇笔记主要记录一下基于mpvue的小程序中实现自定义导航的思路及应用。分享出来抛砖引玉,如有谬误或优化空间,欢迎交流。

小程序的配置项navigationStyle设置为custom之后,导航栏只保留右上角胶囊按钮,颜色、标题文字内容均可以自定义,可以此实现导航栏的个性化需求,实际应用如沉浸式视频播放页等。

小程序7.0.0之后的版本开始支持自定义单个页面的导航栏,将页面的navigationStyle设置为custom即可。mpvue的配置方式如下:

由于不同操作系统、不同机型的导航栏高度是不同的,所以自定义导航栏核心要解决的问题是不同机型中导航栏高度的兼容问题。

如上图所示,导航栏一共由两部分组成:状态栏和标题栏。状态栏就是用来展示时间、网络状态的那一栏,全面屏(刘海屏幕)的机型中状态栏会比其他屏幕高很多:ios系统带刘海屏的都是44,其他都为20,包括pad。 而安卓机的数值则更多。我们可以通过微信的apiwx.getSystemInfo获取状态栏的高度(statusBarHeight)。而标题栏高度不能通过小程序api获取到,通过同级多个机型的测试数据,我们基本可以按照ios中44px安卓中48px来算。
这样一来就好办了,通过statusBarHeight获取到状态栏高度后,再判断当前的系统加上对应的标题栏后,就可以获取到正确的导航栏高度了。

template中的html代:(因为小程序中的video组件有着最高的层级,是不会被普通html标签覆盖的,所以导航栏组件中全部采用了<cover-view>标签。):

<template><div class="comp-navbar"><!-- 占位栏 --><cover-view class="placeholder-bar" :style="{height: navBarHeight + 'px'}"> </cover-view><!-- 导航栏主体 --><cover-view class="navbar" :style="{height: navBarHeight + 'px',backgroundColor:navBackgroundColor}"><!-- 状态栏 --><cover-view class="nav-statusbar" :style="{height: statusBarHeight + 'px'}"></cover-view><!-- 标题栏 --><cover-view class="nav-titlebar" :style="{height: titleBarHeight + 'px' }"><!-- home及后退键 --><cover-view class="bar-options"><cover-view v-if="backVisible" class="opt opt-back" @click="backClick()"><cover-image class="back-image" src="/static/images/back.png"></cover-image></cover-view><cover-view class="line" v-if="backVisible && homePath"></cover-view><cover-view v-if="homePath" class="opt opt-home" @click="homeClick()"><cover-image class="home-image" src="/static/images/home.png"></cover-image></cover-view></cover-view><!-- 标题 --><cover-view class="bar-title" :style="[{color:titleColor}]">{{title}}</cover-view></cover-view></cover-view></div>
</template>

js代码:

    beforeMount() {const self = this;wx.getSystemInfo({success(system) {console.log(`system:`, system);self.statusBarHeight = system.statusBarHeight;self.platform = system.platform;let platformReg = /ios/i;if (platformReg.test(system.platform)) {self.titleBarHeight = 44;} else {self.titleBarHeight = 48;}self.navBarHeight = self.statusBarHeight + self.titleBarHeight;}});},

自定义导航栏的可自定义内容:标题文字、文字颜色、标题栏背景色、回退按钮是否显示、home按钮的地址。示例代码如下:

<navigation-bar :title="videoTitle":navBackgroundColor="'pink'":titleColor="'green'":back-visible="true":home-path="'/pages/index/main'"></navigation-bar>

最后奉上github地址,欢迎检阅代码,欢迎star。

mpvue中小程序自定义导航组件开发指南相关推荐

  1. 微信小程序-自定义导航组件

    一.如何自定义组件 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程.所有自定义组件相关特性都需要基础库版本 1.6.3 或更高. 开发者可以将页面内的功能模块抽象成自定义组件,以便在 ...

  2. android 双导航组件,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

  3. android双导航功能,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

  4. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

    预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...

  5. 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况

    背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...

  6. 微信小程序自定义导航栏组件(完美适配所有手机),可自定义实现任何你想要的功能

    背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...

  7. 微信小程序自定义导航栏组件

    效果图 首先要先在 json文件里加上 "navigationStyle":"custom", 这句,去掉原生的自定义导航栏 一.子组件-wxml <vi ...

  8. Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 <A Developer's Guide To Blazor Templated Components> [1] 在我之前的一篇 ...

  9. 说一说要求 小程序自定义导航栏 的需求有多沙雕

    小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在 超级App 内被便捷地获取和传播,同时具有出色的使用体验. 在小程序项目中 自定义导航栏 绝对算得上是最恶心的需求之一.本篇文章 ...

最新文章

  1. Python外壳:代码结构!(推导式和函数 )
  2. 喀什市2021年高考成绩查询,2021年新疆高考查分网站查分网址:http://www.xjzk.gov.cn/...
  3. TPL中Task执行的内联性线程重入
  4. bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成
  5. 文件及文件组备份与还原示例.sql
  6. Eureka服务注册中心---SpringCloud
  7. 很全的sas基础知识
  8. ajax post 传参数加引号和不加引号的区别
  9. 软件设计原则及设计模式
  10. Redis分布式锁方案
  11. 16款私藏多年的PC端效率小软件推荐
  12. 在SQL Server中导入数据库(.mdf格式)
  13. 【第007问 Unity中如何进行UV动画?】
  14. 设置计算机启动引导顺序,如何设置电脑启动顺序
  15. 全面屏/刘海屏及虚拟键适配--总结版
  16. 2022Java面试笔记(上)
  17. STM32单片机控制A1333角度传感器磁编码器
  18. js Console 对象 - Kaiqisan
  19. xilinx ip xdc修改
  20. 微软校招面试题3-15

热门文章

  1. 开关电源测试系统用哪个软件,开关电源测试系统
  2. mysql oracle 区别吗_MySQL与Oracle的区别(-)
  3. 【PostgreSQL-9.6.3】函数(3)--日期和时间函数
  4. VMware中linux虚拟机无法全屏显示的解决方法(1080P分辨率调节)
  5. Git Your branch is ahead of ‘origin/master‘ by X commits解决方法
  6. win10系统中photoshop cs6中界面字体太小的解决方法
  7. 本地Apache服务器访问时502 Server dropped connection 错误解决方法
  8. 几种常见的Windows 服务器无法联网/无法连接远程桌面等故障解决方案
  9. 如何获取foreach循环当前迭代的索引?
  10. win11网络怎么优化 Windows11优化网速的步骤教程