详解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 页面内容搜索,类似于 Ctrl+F功能的实现代码
Aug 13 Javascript
一些javascript一些题目的解析
Dec 25 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
Oct 14 Javascript
基于JavaScript实现类似于百度学术高级检索功能
Mar 02 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
微信小程序中的onLoad详解及简单实例
Apr 05 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
webpack4 SplitChunks实现代码分隔详解
May 23 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 Javascript
使用webpack和rollup打包组件库的方法
Feb 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
Web开发之JavaScript
2012/03/29 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Flask-Mail用法实例分析
2018/07/21 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
如何利用find命令查找文件
2015/02/07 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
合同意向书范本
2014/07/30 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
外出学习心得体会范文
2016/01/18 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python