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


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 相关文章推荐
Javascript 强制类型转换函数
May 17 Javascript
JavaScript 比较时间大小的代码
Apr 24 Javascript
js 小数取整的函数
May 10 Javascript
js 用CreateElement动态创建标签示例
Nov 20 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
angularJS 入门基础
Feb 09 Javascript
jquery实现的3D旋转木马特效代码分享
Aug 25 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
对vue中v-on绑定自定事件的实例讲解
Sep 06 Javascript
深入解读Node.js中的koa源码
Jun 17 Javascript
js实现秒表计时器
Dec 16 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生成RSS文件类实例
2014/12/05 PHP
php把数组值转换成键的方法
2015/07/13 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
Django重设Admin密码过程解析
2020/02/10 Python
聊聊python中的循环遍历
2020/09/07 Python
Python用Jira库来操作Jira
2020/12/28 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
简单的辞职信怎么写
2015/02/28 职场文书
员工手册编写范本
2015/05/14 职场文书
一般纳税人申请报告
2015/05/18 职场文书
工作证明书
2015/06/15 职场文书
一年级语文教学随笔
2015/08/14 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
分享Python异步爬取知乎热榜
2022/04/12 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS