详解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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
jQuery级联操作绑定事件实例
Sep 02 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
js实现返回顶部效果
Mar 10 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
Aug 20 Javascript
JS实现checkbox互斥(单选)功能示例
May 04 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
JavaScript架构搭建前端监控如何采集异常数据
Jun 25 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
小偷PHP+Html+缓存
2006/12/20 PHP
php 中文处理函数集合
2008/08/27 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
JavaScript 学习技巧
2010/02/17 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
vue实例的选项总结
2020/06/09 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
python 布尔操作实现代码
2013/03/23 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
课改先进个人汇报材料
2014/01/26 职场文书
代理协议书
2014/04/22 职场文书
总经理任命书范本
2014/06/05 职场文书
社保转移委托书范本
2014/10/08 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
教师业务学习材料
2014/12/16 职场文书
应届毕业生自荐信
2015/03/04 职场文书
留学推荐信怎么写
2015/03/26 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis