详解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 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
electron踩坑之remote of undefined的解决
Oct 06 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
如何用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
ADODB的数据库封包程序库
2006/12/31 PHP
也谈php网站在线人数统计
2008/04/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP 图片水印类代码
2012/08/27 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
Jquery ui css framework
2010/06/28 Javascript
基于jquery的表格排序
2010/09/11 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
2014年预备党员学习两会心得体会
2014/03/17 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Golang实现可重入锁的示例代码
2022/05/25 Golang