详解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中的location用法简单介绍
Mar 07 Javascript
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
Javascript学习指南
Dec 01 Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
May 12 Javascript
js实现图片懒加载效果
Jul 17 Javascript
vue实现未登录跳转到登录页面的方法
Jul 17 Javascript
vue的列表交错过渡实现代码示例
May 05 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
咖啡知识大全
2021/03/03 新手入门
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
php事务处理实例详解
2014/07/11 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
Javascript缓存API
2016/06/14 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
详解Python yaml模块
2020/09/23 Python
用python制作个音乐下载器
2021/01/30 Python
Python操作Excel的学习笔记
2021/02/18 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
全球度假村:Club Med
2017/11/27 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
施工质量承诺书范文
2014/05/30 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
优秀团员自我评价
2015/03/10 职场文书
归途列车观后感
2015/06/17 职场文书
新兵入伍决心书
2015/09/22 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
JavaScript 原型与原型链详情
2021/11/02 Javascript
SQLServer常见数学函数梳理总结
2022/08/05 MySQL