视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详解mpvue中小程序自定义导航组件开发指南
2020-11-27 22:01:10 责编:小采
文档


这篇笔记主要记录一下基于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="https://www.gxlcms.com/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="https://www.gxlcms.com/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。

下载本文
显示全文
专题