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


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 ready(fn)事件使用介绍
Aug 21 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
Jun 12 Javascript
js设置文字颜色的方法示例
Dec 30 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
Jul 03 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
Aug 31 Javascript
JS实现的找零张数最小问题示例
Nov 28 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
Vue实现图片轮播组件思路及实例解析
May 11 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&amp;&amp;mysql)四
2006/10/09 PHP
给多个地址发邮件的类
2006/10/09 PHP
php时间不正确的解决方法
2008/04/09 PHP
php过滤危险html代码
2008/08/18 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP 变量的定义方法
2010/01/26 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
JSONP之我见
2015/03/24 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python 实现数组相减示例
2019/12/27 Python
Python Http请求json解析库用法解析
2020/11/28 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
检察官就职演讲稿
2014/01/13 职场文书
股东协议书
2014/04/14 职场文书
运动会口号大全
2014/06/07 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
回复函格式及范文
2015/07/14 职场文书
中秋节祝酒词
2015/08/12 职场文书
交通安全学习心得体会
2016/01/18 职场文书