微信小程序系列之自定义顶部导航功能


Posted in Javascript onMay 21, 2019

具备基础

vue框架:vue官方文档

mpvue框架:mpvue官方文档

全局配置

•找到全局的app.json文件,在配置中添加如下内容:

"navigationStyle": "custom"
"window": {
 "backgroundTextStyle": "light",
 "navigationBarBackgroundColor": "#fff",
 "navigationBarTitleText": "WeChat",
 "navigationBarTextStyle": "black",
 "navigationStyle": "custom" // 这个配置
}

组件思维

•使用mpvue开发小程序,src目录下默认会生成一个components文件夹;
•由于自定义组件所有webview页面都要使用,所以把它归类为公共组件;
•可以在components文件夹下新建一个common文件夹,专门放置公共组件,如下:

├── src                    源码目录 
│  ├── main.js             入口js文件
│  ├── app.json            全局配置
│  ├── components          组件目录
│  │  └── common           公共组件
          └── topBar.vue   顶部自定义导航复制代码

组件内容

•由于不同设备statusBarHeight值可能有差异,自定义组件的高度取决于statusBarHeight值;
•找到全局App.vue文件,在这里面执行小程序的onLaunch生命周期(监听小程序初始化);
•具体获取方法如下:

const that = this
let systemInfo = wx.getSystemInfoSync()
that.setBarHeight(systemInfo.statusBarHeight)

• 通过vuex存储statusBarHeight值,不清楚vuex如何在小程序中使用的可参考mpvue如何使用vuex;
•.vue文件的html相关结构如下:

<template>
 <div class="top-bar">
 <div class="bar" :style="'height:'+(systemInfo.barHeight+46)+'px;'">
  <span class="title">{{title}}</span>
  <button v-if="way && way==='/pages/mine/main'" open-type="getUserInfo" @getuserinfo="toMine">
  <image class="icon" :src="icon" />
  </button>
  <image v-else-if="way && way!=='/pages/mine/main'" class="icon-back" :src="icon" @tap="toPage(way)" />
  <span v-else></span>
 </div>
 <p class="place-holder" :style="'padding-top:'+(systemInfo.barHeight+6)+'px;'"></p>
 </div>
</template>

•结构分析如下,可看做两部分,一部分是fixed定位在顶部的class="bar"的div;另一部分是class="place-holder"的p;
•之所以要放一个p标签,是因为不用每次引入topBar.vue时都要考虑class="bar"的div都会遮挡内容区的问题;
•因此将p标签height:80rpx;加上padding-top的6px;正好等于class="bar"的div的高度;

微信小程序系列之自定义顶部导航功能 

微信小程序系列之自定义顶部导航功能 

•由于项目中左边放置的是进入个人中心的功能,所以左边头像必须使用button来出发获取用户信息的授权;
•同时需要考虑到左边不是头像的情况,这时就可以用到vue的props属性,具体props值,看下面代码,默认是给向左的箭头,表示返回上一页;

props: {
 title: {
 type: String,
 required: true
 },
 icon: {
 type: String,
 default: require('@static/icon/icon_back.png')
 },
 way: {
 type: String,
 default: null
 }
}

•如果way啥也不传则左侧不显示任何icon;
•如果way传入的是进入个人中心的路由,则走button结构上面的事件;
•如果way传入的是‘back',则显示返回的向左箭头。

问题总结

•该公共topBar.vue组件对ipad不能有效适配;
•fixed定位在安卓手机上下拉刷新时,结构会跟着下拉,例如本文的自定义导航,下拉刷新的时候导航会跟着下拉然后再fixed到顶部(开发者工具上没问题,真机有问题);

以上所述是小编给大家介绍的微信小程序系列之自定义顶部导航功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
执行iframe中的javascript方法
Oct 07 Javascript
Extjs学习笔记之四 工具栏和菜单
Jan 07 Javascript
javascript sudoku 数独智力游戏生成代码
Mar 27 Javascript
jquery如何获取复选框的值
Dec 12 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
使用Vue制作图片轮播组件思路详解
Mar 21 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
Apr 23 Javascript
vue组件间的参数传递实例详解
Apr 26 Javascript
ant design vue中表格指定格式渲染方式
Oct 28 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 #Javascript
微信小程序websocket实现即时聊天功能
May 21 #Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
May 21 #Javascript
taro开发微信小程序的实践
May 21 #Javascript
element-ui表格合并span-method的实现方法
May 21 #Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
May 21 #Javascript
浅谈React Native 传参的几种方式(小结)
May 21 #Javascript
You might like
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
jquery map方法使用示例
2014/04/23 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Python生成随机验证码的两种方法
2015/12/22 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
python常见排序算法基础教程
2017/04/13 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
使用Python进行目录的对比方法
2018/11/01 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
python 基于opencv操作摄像头
2020/12/24 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
采购部岗位职责
2013/11/24 职场文书
网络技术专业推荐信
2014/02/20 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
2014年个人总结范文
2015/03/09 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
win10清理dns缓存
2022/04/19 数码科技