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


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 相关文章推荐
js 函数的执行环境和作用域链的深入解析
Nov 01 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
Feb 22 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 Javascript
详解小程序循环require之坑
Mar 08 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
Mar 09 Javascript
JavaScript实现两个数组的交集
Mar 25 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
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
php动态变量定义及使用
2015/06/10 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 正则式使用心得
2009/05/07 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python学生信息管理系统修改版
2018/03/13 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python装饰器的特性原理详解
2019/12/25 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python绘制分布折线图的示例
2020/09/24 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
学生实习自我鉴定
2013/10/11 职场文书
市场营销战略计划书
2014/05/06 职场文书
工会工作先进事迹
2014/08/18 职场文书
跑出一片天观后感
2015/06/08 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL