详解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宝典学习笔记(下)
Jan 10 Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
Jun 02 Javascript
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
javascript实现文字无缝滚动
Dec 27 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
Jun 19 Javascript
详解Vue This$Store总结
Dec 17 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 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
adodb与adodb_lite之比较
2006/12/31 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP源码之explode使用说明
2011/08/05 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
动态创建类实例代码
2009/10/07 Python
Python中内建函数的简单用法说明
2016/05/05 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
Python 求向量的余弦值操作
2021/03/04 Python
如何选择使用结构还是类
2014/05/30 面试题
鼓励运动员的广播稿
2014/02/08 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
校庆筹备方案
2014/03/30 职场文书
公司联欢会策划方案
2014/05/19 职场文书
物业保安岗位职责
2014/07/02 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
在python中读取和写入CSV文件详情
2022/06/28 Python