微信小程序自定义导航栏【超详细】

前言

开发过程中,总会遇到ui给出的风格迥异的导航栏。比如:导航栏背景颜色渐变、导航栏背景是图片,等等。如果只用微信提供的navigationBarBackgroundColor肯定无法满足这些需求,因为它只能设置16进制的颜色,所以我们需要自定义导航栏,从而满足这些需求。

知识点

wx.getMenuButtonBoundingClientRect()

自定义导航栏我们一定要认识到这个方法,它可以获取菜单按钮(右上角胶囊按钮)的布局位置信息,通过该方法提供的信息,我们就能完美兼容不同屏幕的导航栏。

这是getMenuButtonBoundingClientRect所获取到的数据,咋一看不好理解,所以我给出了下面这张图,以下图解就很清楚了

步骤

  1. page.json 局部设置中取消自带的导航栏
json 复制代码
"navigationStyle": "custom"
  1. onLoad() 生命函数中获取胶囊信息,并通过胶囊信息设置自定义导航栏样式
js 复制代码
onLoad() {
    const {
        width,
        height,
        top,
        bottom,
        left,
        right
    } = wx.getMenuButtonBoundingClientRect();
    
    this.setData({
        tapNavSty: `height: ${bottom}px`
    });
}
  1. 样式文件中,设置导航栏容器的基本样式
wxss 复制代码
.top-nav-box {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 999;
    width: 100%;
    background: linear-gradient(to bottom right, blue, pink);
}
  1. 模板文件中,绑定动态获取的导航栏高度
wxml 复制代码
<view class="top-nav-box" :style="topNavSty">

</view>
  1. 这样就得到自定义的导航栏效果啦

总结

理解getMenuButtonBoundingClientRect获取的胶囊信息,并且取消自带的导航栏,最终设置自定义导航栏,设置导航栏容器的基本样式时不仅仅可以设背景色,还是设置背景图片,从而满足设计需求啦

相关推荐
Pedantic2 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘2 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆2 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师3 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆3 小时前
VSCode自动格式化三要素
前端
爱勇宝4 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen4 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518137 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode7 小时前
Redis 在生产项目的使用
前端·后端