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


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 相关文章推荐
JQuery 绑定事件时传递参数的实现方法
Oct 13 Javascript
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
js代码实现随机颜色的小方块
Jul 30 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
自定义PC微信扫码登录样式写法
Dec 12 Javascript
JavaScript中Object值合并方法详解
Dec 22 Javascript
vue数据传递--我有特殊的实现技巧
Mar 20 Javascript
详解jQuery设置内容和属性
Apr 11 jQuery
Vue中实现权限控制的方法示例
Jun 07 Javascript
VUE实现图片验证码功能
Nov 18 Javascript
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
php fckeditor 调用的函数
2009/06/21 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
Javascript实现运算符重载详解
2018/04/07 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python中time库的实例使用方法
2019/10/31 Python
介绍Ibatis的核心类
2013/11/18 面试题
美术专业学生个人自我评价
2013/09/19 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
暑期培训班策划方案
2014/08/26 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
无线电知识基础入门篇
2022/02/18 无线电