详解mpvue中小程序自定义导航组件开发指南


Posted in Javascript onFebruary 11, 2019

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

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

详解mpvue中小程序自定义导航组件开发指南

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

详解mpvue中小程序自定义导航组件开发指南

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

详解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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js split 的用法和定义 js split分割字符串成数组的实例代码
May 13 Javascript
JQuery获取表格数据示例代码
May 26 Javascript
jQuery中val()方法用法实例
Dec 25 Javascript
12种JavaScript常用的MVC框架比较分析
Nov 16 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
webpack4 optimization使用总结
Nov 10 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
May 06 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
如何用JavaScript实现功能齐全的单链表详解
Feb 11 #Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 #Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 #Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
Feb 11 #Javascript
react配置antd按需加载的使用
Feb 11 #Javascript
react中使用css的7中方式(最全总结)
Feb 11 #Javascript
mpvue+vant app搭建微信小程序的方法步骤
Feb 11 #Javascript
You might like
PHP4之COOKIE支持详解
2006/10/09 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP实现小偷程序实例
2016/10/31 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
python实现rest请求api示例
2014/04/22 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
银行竞聘演讲稿范文
2014/04/23 职场文书
市场营销调查计划书
2014/05/02 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
土地租赁协议书
2015/01/29 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
Java 数组的使用
2022/05/11 Java/Android