当前位置:网站首页>小程序实战(三) - 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
,一个前端学习者,希望可以同大家一起学习进步,一起加油~
本系列作者:猪痞恶霸
边栏推荐
- 图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)
- SkiaSharp 之 WPF 自绘 粒子花园(案例版)
- 【LeetCode】1403.非递增顺序的最小子序列
- Camunda overall architecture and related concepts
- MySQL不提供数组,只能做成表吗?
- AWS Lambda related concepts and implementation approach
- 【LeetCode】701.二叉搜索树中的插入操作
- 上帝空间——全球首个基于Web3.0的艺术协议创意平台,拓宽多元艺术融合边界
- Why are all hotel bathrooms transparent?
- 化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
猜你喜欢
Leetcode刷题——构造二叉树(105. 从前序与中序遍历序列构造二叉树、106. 从中序与后序遍历序列构造二叉树)
【Idea series】idea configuration
Win11文件类型怎么改?Win11修改文件后缀的方法
CVPR 2022 | 从人体网格预测骨架,是真正的生理学骨架!
解析treeSet集合进行自定义类的排序
ROI LTV CPA ECPM体系讲解
audio_policy_configuration.xml配置文件详解
数据化管理洞悉零售及电子商务运营——零售密码
线程必备内容
Digital management insight into retail and e-commerce operations - retail password
随机推荐
Oracle中对临时表空间执行shrink操作
【虹科案例】基于3D相机组装家具
浅析深度学习在图像处理中的应用趋势及常见技巧
2万字50张图玩转Flink面试体系
【LeetCode】98.验证二叉搜索树
Advanced transcriptome analysis and R data visualization hot registration (2022.10)
Heap Sort
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之三
AWS Lambda相关概念与实现思路
数据化管理洞悉零售及电子商务运营——零售密码
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
Leetcode刷题——路径总和
Why are all hotel bathrooms transparent?
Leetcode刷题——543. 二叉树的直径、617. 合并二叉树(递归解决)
zabbix部署
cat /proc/kallsyms 发现内核符号表值都为0
线程必备内容
AWS Lambda related concepts and implementation approach
Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)
Meishe Q&A Room | Meiying VS Meishe Cloud Editing