详解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 vvorld 在线加密破解方法
Nov 13 Javascript
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
JavaScript基础知识学习笔记
Dec 02 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
Sep 30 Javascript
JS实现标签滚动切换效果
Dec 25 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
JavaScript日期工具类DateUtils定义与用法示例
Sep 03 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
Python中atexit模块的基本使用示例
2015/07/08 Python
django定期执行任务(实例讲解)
2017/11/03 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
浅谈python中get pass用法
2019/03/19 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
房屋改造计划书
2014/01/10 职场文书
家具促销活动方案
2014/02/16 职场文书
服装采购员岗位职责
2014/03/15 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
汽车专业求职信
2014/06/05 职场文书
产品委托授权书范本
2014/09/16 职场文书
nginx优化的六点方法
2021/03/31 Servers