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


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 相关文章推荐
获取URL地址中的文件名和参数的javascript代码
Sep 02 Javascript
用JQuery调用Session的实现代码
Oct 29 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
Jul 13 jQuery
JS实现的base64加密解密操作示例
Apr 18 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
Webpack中loader打包各种文件的方法实例
Sep 03 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
js转换对象为xml
2017/02/17 Javascript
babel基本使用详解
2017/02/17 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
js构造函数创建对象是否加new问题
2018/01/22 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
机械专业技术员求职信
2014/06/14 职场文书
物业管理专业自荐信
2014/07/01 职场文书
承诺书应该怎么写?
2019/09/10 职场文书