详解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 相关文章推荐
用prototype实现的简单小巧的多级联动菜单
Mar 24 Javascript
javascript URL锚点取值方法
Feb 25 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
EasyUI布局 高度自适应
Jun 04 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
100行代码实现一个vue分页组功能
Nov 06 Javascript
通过图带你深入了解vue的响应式原理
Jun 21 Javascript
JS如何使用剪贴板操作Clipboard API
May 17 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
php实现的CSS更新类实例
2014/09/22 PHP
告诉大家什么是JSON
2008/06/10 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
Javascript window对象详解
2014/11/12 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
js数组去重的方法总结
2019/01/18 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python2和python3哪个使用率高
2020/06/23 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
python Selenium 库的使用技巧
2020/10/16 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
mysql有关权限的表都有哪几个
2015/04/22 面试题
优秀的教师个人的中文求职信
2013/09/21 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
新学期决心书
2014/03/11 职场文书
展览会邀请函
2015/02/02 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL