记一次小程序自定义导航栏及加载动画的解决方案
记一次小程序自定义导航栏及加载动画的解决方案
主要逻辑就是动态获取设备的 statusBarHeight 和 titleBarHeight,来设置导航栏的高度和 paddingTop
ip6
ipx
loading
导航栏是一个组件,自定义组件通过 properties 获得 prop 参数的,组件还需要维护 statusBarHeight,titleBarHeight 和 navigatorHeight(实际没用到) 这三个 data
通过在小程序 ready 生命周期内调用 setBarHeight 来动态获取这三个 data 变量
Component({properties: {title: {type: String,default: 'default title'},ifShowBtn: {type: Boolean,default: true}},data: {statusBarHeight: 0,titleBarHeight: 0,navigatorHeight: 0},ready: function () {this.setBarHeight()},
复制代码
组件还有三个方法,这三个方法分别是:设置状态栏和标题栏高度的 setBarHeight、动态获取状态栏和标题栏高度的 getBarHeight,以及判断是否为 IOS 系统。
因为判断是否为 IOS 系统才能够设置 titleBarHeight,iPhone 或 iPad 的这个值为 44,安卓的统一设置为 48 即可
methods: {// 设置状态栏和标题栏高度setBarHeight: function () {this.isIOS().then(this.getBarHeight).then(res => {this.setData({statusBarHeight: res.statusBarHeight,titleBarHeight: res.titleBarHeight,navigatorHeight: res.navigatorHeight})})},// 动态获取状态栏高度和标题栏高度getBarHeight: function (isIOS) {return new Promise((resolve, reject) => {wx.getSystemInfo.call(this, {success: res => {let statusBarHeight = res.statusBarHeightlet titleBarHeight = isIOS ? 44 : 48resolve({ statusBarHeight, titleBarHeight, navigatorHeight: statusBarHeight + titleBarHeight })},failure: res => {reject('error getting systeminfo')}})})},// 判断是否为 IOS 系统isIOS: function () {return new Promise((resolve, reject) => {wx.getSystemInfo.call(this, {success: res => {if (res.model.indexOf('iPhone') > -1 || res.system.indexOf('iOS') > -1) {resolve(true)} else {resolve(false)}},failure: res => {reject('error getting systeminfo')}})})}
复制代码
另外,在获得这些变量之后可以存入到 app 的 globalData 对象中,每次只需要从这个对象获取变量即可
然后编写 wxml:
<view style="height: {{titleBarHeight}}px; padding-top: {{statusBarHeight}}px;"><view class="header" style="height: {{titleBarHeight}}px; padding-top: {{statusBarHeight}}px;"><view wx:if="{{ifShowBtn}}" class="header-btn"><view class="btn-item">B</view><view class="btn-item">H</view></view><view class="header-title">{{title}}</view></view><view class="loading">loading...</view>
</view>
复制代码
自定义导航栏的高度就是 titleBarHeight,paddingTop 的值就是 statusBarHeight
因为自定义导航栏是 fixed 元素,因此这个 class 为 header 的 view 元素设置样式如下:
.header {display: flex;align-items: center;position: fixed; /* fixed 因此在 wxml 中还需要再次设置一遍 height 和 paddingTop */top: 0;background: #fff;width: 100%;z-index: 9999;
}
复制代码
header-title 是一个绝对定位的元素,需要设置样式,将其居中:
.header-title {position: absolute;left: 50%;transform: translateX(-50%)
}
复制代码
最后还需要解决 pullDownRefresh 的加载动画问题,如果没有修复这个问题会出现一个大的空白
首先需要设置 app.json
- backgroundTextStyle 为 light
- navigationBarTextStyle 为 black
{"pages": ["pages/index/index"],"window": {"backgroundTextStyle": "light","navigationStyle": "custom","enablePullDownRefresh": true,"navigationBarBackgroundColor": "#fff","navigationBarTextStyle": "black"}
}
复制代码
然后增加组件 wxml 中 class 为 loading 的元素这个就是自定义加载动画
然后增加样式:
.loading {height: 100%;display: flex;justify-content: center;align-items: center;
}
复制代码
flex 布局并居中即可
最后设置 navigator.json 将模块定义为组件
{"component": true
}
复制代码
在页面中使用:
修改配置文件:
{"usingComponents": {"navigator": "../../components/navigator/navigator"}
}
复制代码
修改 wxml 文件:
<navigator ifShowBtn="{{true}}" title="the navigator"></navigator>
<view class="container">
<!-- ...... -->
</view>
复制代码
参考:
- www.w3xue.com/exp/article…
- juejin.im/post/5b7d5f…
转载于:https://juejin.im/post/5c91fc6bf265da60f00ec9f8
记一次小程序自定义导航栏及加载动画的解决方案相关推荐
- 微信小程序自定义导航栏(带汉堡包菜单)
微信小程序自定义导航栏(带汉堡包菜单) 1.在app.json中 window配置navigationStyle (如果单独页面使用,可在页面的json文件配置) 2.计算相关值 整个导航栏的高度: ...
- 小程序自定义导航栏返回主页
小程序自定义导航栏返回主页 效果图 在app.js中获取状态栏的高度statusBarHeight 自定义组件navbar.wxml 自定义组件navbar.wxss 自定义组件navbar.json ...
- 说一说要求 小程序自定义导航栏 的需求有多沙雕
小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在 超级App 内被便捷地获取和传播,同时具有出色的使用体验. 在小程序项目中 自定义导航栏 绝对算得上是最恶心的需求之一.本篇文章 ...
- 小程序自定义导航栏 navigationStyle
小程序自定义导航栏 微信提供自定义导航栏说明 开始自定义导航栏组件 微信提供自定义导航栏说明 微信版本 6.60 window下的 navigationStyle 属性,设置为 custom 即可关闭 ...
- taro 请务必在小程序页面中完善页面基础信息_小程序自定义导航栏(完美适配所有手机)...
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...
- 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...
- 小程序自定义导航栏(完美适配所有手机)解决上下不居中 左右不对齐 高度不协调问题...
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更 ...
- 微信小程序自定义导航栏 navigation bar 返回键 首页
微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键.首页键,动态设置标题,响应式组件 版本号:2.0.0 作者:chen-yt github: https://g ...
- 微信小程序自定义导航栏组件(完美适配所有手机),可自定义实现任何你想要的功能
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...
最新文章
- mysql数据库主从同步过程详述(三)
- python RSA 加密与签名
- 高防服务器究竟能防御哪些攻击?
- js随机跳转域名_【教程】无需域名和服务器搭建属于自己的导航页!!!
- linux查找替换grep以及正则表达式
- java ftp 连接超时时间_ftpClient的连接超时设置(setConnectTimeout,setSoTimeout) | 学步园...
- ubuntu搭建nodejs生产环境——快速部署手册
- ctfshow-网络迷踪-新手上路 ( 使用百度搜图收集景点信息)
- 使用Netsparker扫描及**某站点
- linux读写磁盘文件寿命,linux下TF卡测试寿命的测试程序编写
- 用Adobe Flex3开发AIR应用程序–入门指南
- 计算机telnet命令大全,telnet 命令使用方法详解,telnet命令怎么用
- 前端开发工程师就业时应该选择大公司还是小公司?这是我听过最靠谱的答案!
- protected 修饰符的使用
- 百万在线:大型游戏服务端开发
- PostgreSQL 连接(JOIN)
- MATLAB找勾股数,一种寻找勾股数的方法
- 目录遍历,PHP 遍历一个文件夹下所有文件和子文件夹的方法
- day21 Excel基本操作
- [4月24日] 苦练基本功,事半功倍!
热门文章
- MyBatis 核心对象,工作原理及源码解读
- [swift] LeetCode 695. Max Area of Island
- L1-040 最佳情侣身高差-PAT团体程序设计天梯赛GPLT
- [Java] 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级
- LeetCode 647. Palindromic Substrings
- 蓝桥杯 ADV-127 算法提高 日期计算
- 【软件测试】负载测试与压力测试的区别
- max函数|C++返回数组中的最大值——max_element函数
- javaEmail发邮件是问号乱码,已解决
- WINDOWS SERVER 2003 R2 AD域控安装过程实践