详解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 相关文章推荐
一个高效的JavaScript压缩工具下载集合
Mar 06 Javascript
Mootools 1.2教程 Tooltips
Sep 15 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
JavaScript文本特效实例小结【3个示例】
Dec 22 Javascript
一百行JS代码实现一个校验工具
Apr 30 Javascript
vue实现路由懒加载及组件懒加载的方式
Jun 11 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
如何用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速度快类库
2007/03/31 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
利用Python开发实现简单的记事本
2016/11/15 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Django forms组件的使用教程
2018/10/08 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
python自动化办公操作PPT的实现
2021/02/05 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
会计毕业生自荐书
2014/06/12 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书