当前位置:网站首页>小程序实战(三) - head组件的封装与使用
小程序实战(三) - head组件的封装与使用
2022-08-04 11:13:00 【是乃德也是Ned】
阅读本文你可知道
- 如何在小程序中进行head配置
- 如何封装一个自定义head组件
默认的head配置方式
微信小程序的head一般是开发者通过在app.json来设置统一的样式,又或者在每个页面的json中对对应的页面进行设置
全局页面配置
我们可以在app.json中进行系统默认的全局head配置
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#35d492",
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle": "black"
},
- navigationBarBackgroundColor:设置的head背景颜色
- navigationBarTitleText:设置的默认head文字内容
- navigationBarTextStyle:head文字内容颜色
更多配置请参考官方文档:页面配置 | 微信开放文档 (qq.com)
单页面配置
除此之外,在使用默认配置head的情况下,我们可以在想要自定义head内容的页面对应的json文字中进行配置,比如我想更改个人设置页面head文本内容,即在person.json中进行如下配置即可,其他相关设置默认为app.json中的配置。
{
"usingComponents": {},
"navigationBarTitleText": "个人"
}
自定义封装head组件
首先,我们要进行自定义封装的目的是什么?
- 页面head部分包含特定的功能,比如说:搜索框,地理位置等。
- 应用中需要换肤功能,需要根据设置来更改head的背景颜色。
美团.jpg
比如说美团小程序这里的head就为封装的head组件,包含了地理位置的功能,接下来开始封装属于我们的head
获取系统的head高度
因为不同机型的顶部高度不同,所以我们必要根据不同的机型设置不同的head高度
我们需要在app.js即小程序的入口文件中调用wx.getSystemInfo来获取用户的机型信息还有wx.getMenuButtonBoundingClientRect()获取菜单按钮(右上角胶囊按钮)的布局位置信息,官方文档api介绍:wx.getSystemInfo,wx.getMenuButtonBoundingClientRect()
wx.getSystemInfo({
success: (res) => {
let capsule = wx.getMenuButtonBoundingClientRect();
var statusBarHeight = res.statusBarHeight; //顶部状态栏高度
this.globalData.capsule = capsule;
this.globalData.titleHeight = statusBarHeight + capsule.height + (capsule.top - statusBarHeight) * 2;
},
})
关于这个顶部高度计算公式,我通过如下图所示分层介绍一下
image.png
res.statusBarHeight为通过api获取的状态栏高度
capsule是记录胶囊信息的变量对象,其top属性值为以手机左上角为坐标原点,胶囊的距离x轴的长度
所以整体的高度大小为:状态栏高度+胶囊高度+*2(胶囊距顶高度-状态栏高度)**,胶囊距顶高度-状态栏高度为蓝色线与白色线之间的间距,最后即得statusBarHeight + capsuleObj.height + (capsuleObj.top - statusBarHeight) * 2
封装组件
封装头部组件的方式和其他组件相同,在components目录下新建组件
获取高度
首先我们需要在attached生命周期中通过获取全局变量的方式拿到我们所需要的胶囊信息与高度信息,并响应式的设置值
attached: function() {
const app = getApp()
this.setData({
titleHeight: app.globalData.titleHeight,
capsule: app.globalData.capsule
})
},
配置组件属性
为了可以让头部组件更加自由,我们需要在组件属性列表中配置
properties: {
customTitle: String,
backgroundColor: {
type: String,
value: ''
},
location: {
type: Boolean,
value: false
},
back: {
type: Boolean,
value: false
},
},
这里我配置了三个属性,即背景颜色,定位信息图标,返回按钮,根据不同的功能设置值的类型即可,比如背景颜色这里为字符串类型,其他为布尔型
配置组件功能
一般来说基础head的基本功能就是返回上一个页面,封装一个back方法调用 wx.navigateBack即可,其他方法可以根据需求增加
methods: {
back: function() {
wx.navigateBack({
delta: 1
})
},
}
组件自适应高度
我们在第一步的时候就拿到了高度的信息,所以我们之间可以为dom元素添加行内样式即可
<wxml style="height:{{titleHeight}}px; background-color:{{backgroundColor}};"></wxml>
完整demo
具体组件封装demo可以去开源仓库查看:hogB/hoewo (github.com)欢迎star。
使用组件
引入组件
首先需要在需要使用组件的页面json文件中进行组件的引入
"usingComponents": {
"Header": "/components/headBar/headBar",
},
取消默认head
在页面的json文件中取消默认head的配置,如下
"navigationStyle": "custom"
直接使用
最后一步直接使用即可,相关属性根据自己的配置来设置。
<Header location customTitle="首页"></Header>
最后
我是Ned,一个前端学习者,希望可以同大家一起学习进步,一起加油~
本系列作者:猪痞恶霸
边栏推荐
- Xilinx VIVADO 中 DDR3(Naive)的使用(2)读写设计
- Apache Calcite 框架原理入门和生产应用
- win8和win10下,visual studio 2008 调试出现无响应的卡死问题解决
- 2万字50张图玩转Flink面试体系
- 秒云成功入选《2022爱分析 · 银行数字化厂商全景报告》,智能运维能力获认可
- C language * Xiaobai's adventure
- datax oracle to oracle incremental synchronization
- MySQL不提供数组,只能做成表吗?
- cubemx stm32 afm3000 module gas flow sensor driver code
- 临床研究方法学,到现场,到数据真实发生的地方 | 对话数智 x 张维拓
猜你喜欢

Meishe Q&A Room | Meiying VS Meishe Cloud Editing

Heap Sort

8月活动|51CTO十七周年庆,发博文得茶具/笔记本/T恤等礼品!

面试蚂蚁(P7)竟被MySQL难倒,奋发图强后二次面试入职蚂蚁金服

Using .NET to simply implement a high-performance clone of Redis (2)

【Inspirational】The importance of review

Use pytest hook function to realize automatic test result push enterprise WeChat

cubemx stm32 afm3000模块 气体流量传感器 驱动代码

解析treeSet集合进行自定义类的排序

剑指长城炮? 长安全新皮卡官方谍照
随机推荐
Learn to use the basic interface of set and map
Google Earth Engine APP ——制作上传GIF动图并添加全球矢量位置
数字知识库及考学一体化平台
上帝空间——全球首个基于Web3.0的艺术协议创意平台,拓宽多元艺术融合边界
Leetcode刷题——构造二叉树(105. 从前序与中序遍历序列构造二叉树、106. 从中序与后序遍历序列构造二叉树)
Four ways to traverse a Map
A topic of map
[easyUI]修改datagrid表格中的值
【Idea系列】idea配置
Mysql高级篇学习总结13:多表连接查询语句优化方法(带join语句)
tp5+微信小程序 分片上传
AWS Lambda related concepts and implementation approach
Meishe Q&A Room | Meiying VS Meishe Cloud Editing
什么是 DevOps?看这一篇就够了!
Using .NET to simply implement a high-performance clone of Redis (2)
网管交换机与非网管交换机如何选择?
Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)
Maple 2022软件安装包下载及安装教程
cat /proc/kallsyms 发现内核符号表值都为0
Graphical Hands-on Tutorial--ESP32 OTA Over-the-Air Upgrade (VSCODE+IDF)