详解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 20 Javascript
javascript replace方法与正则表达式
Feb 19 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
Node.js Event Loop各阶段讲解
Mar 08 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 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
php实现用户在线时间统计详解
2011/10/08 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php实现文件上传基本验证
2020/03/04 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
angular的输入和输出的使用方法
2018/09/22 Javascript
JS中数据结构之栈
2019/01/01 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
python+mysql实现简单的web程序
2014/09/11 Python
python机器学习之贝叶斯分类
2018/03/26 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
公司股份合作协议书
2014/12/07 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
python APScheduler执行定时任务介绍
2022/04/19 Python