Taro编译微信小程序实现顶部自定义导航栏

2023-11-10

【需求】

使用taro开发微信小程序的过程中,涉及到小程序的需要自定义顶部导航栏(导航栏渐变色),微信小程序中只能够设置固定的颜色,渐变颜色以及添加其他按钮的操作就不能够通过小程序自带的api来实现
在这里插入图片描述

【思路】

  1. 配置自定义导航栏设置
  2. 获取顶部状态栏高度、胶囊按钮高度、以及胶囊到顶部的高度
  3. 计算状态栏的高度,并赋值给dom元素
  4. 实现icon跳转及组件化

【代码】

1. 配置自定义导航栏设置

pages — demand — index.config.js

export default {
  navigationStyle:'custom', // 设置导航自定义
}

2. 相应高度的获取

在代码中,我们
通过wx.getMenuButtonBoundingClientRect() 来获取胶囊的数据,
在这里插入图片描述

通过wx.getSystemInfoSync() 来获取设备系统的数据
在这里插入图片描述

 constructor(props){
    super(props)
    this.state={
      navBarHeight:0,
    }
  }
  getNavHeight(){
    let menuButtonObject = wx.getMenuButtonBoundingClientRect(); //获取胶囊对象
    var sysinfo = wx.getSystemInfoSync(); // 获取设备系统对象
    let statusBarHeight = sysinfo.statusBarHeight; // 获取状态栏高度
    let menuBottonHeight =  menuButtonObject.height; //获取胶囊顶部高度
    let menuBottonTop =  menuButtonObject.top; // 获取胶囊距离顶部的高度
    let navBarHeight = statusBarHeight + menuBottonHeight + (menuBottonTop - statusBarHeight) * 2 ; //计算nav导航栏的高度(上图蓝色线段的长度)
    this.setState({ //更新高度数据
      navBarHeight,
    })
  }

计算高度的原理:
在这里插入图片描述

3. 计算状态栏的高度,并赋值给dom元素

      <View className='nav_custom_bar' style={{height:` ${this.state.navBarHeight}px`}}>

4.实现icon跳转及组件化

实现跳转

import Taro from '@tarojs/taro';
import { AtIcon }  from 'taro-ui'

...
  goBackPage(){
    Taro.navigateBack({
      delta: 1
    })
  }
...
...
 <AtIcon className={`nav_custom_bar_back ${needBackIcon?'':'hidden'}`} value='chevron-left' size='22' color='#fff' onClick={()=>{this.goBackPage()}}></AtIcon>
...

组件化

在这里插入图片描述
完整代码
index.jsx

import Taro from '@tarojs/taro';
import { View, Text , Button} from '@tarojs/components';
import { AtIcon }  from 'taro-ui'
import { Component } from 'react'
import './index.scss'

class NavCustomBar extends Component {

  constructor(props){
    super(props)
    this.state={
      navBarHeight:0,
    }
  }

  componentWillMount () { 
    this.getNavHeight()
  }

  getNavHeight(){
    let menuButtonObject = wx.getMenuButtonBoundingClientRect();
    console.log('wx.getMenuButtonBoundingClientRect()',menuButtonObject)
    var sysinfo = wx.getSystemInfoSync();
    console.log('wx.getSystemInfoSync()',sysinfo)
    let statusBarHeight = sysinfo.statusBarHeight;
    let menuBottonHeight =  menuButtonObject.height;
    let menuBottonTop =  menuButtonObject.top;
    let navBarHeight = statusBarHeight + menuBottonHeight + (menuBottonTop - statusBarHeight) * 2 ; 
    this.setState({
      navBarHeight,
    })
  }

  goBackPage(){
    Taro.navigateBack({
      delta: 1
    })
  }

  render () {
    let { needBackIcon=true, mainTitle='' } = this.props
    return (
      <View className='nav_custom_bar' style={{height:` ${this.state.navBarHeight}px`}}>
       <AtIcon className={`nav_custom_bar_back ${needBackIcon?'':'hidden'}`} value='chevron-left' size='22' color='#fff' onClick={()=>{this.goBackPage()}}></AtIcon>
       <Text className='nav_custom_bar_title'>{mainTitle}</Text>
       <View></View>
      </View>
    )
  }
}
export default NavCustomBar;

index.scss

.nav_custom_bar{
  width: 100%;
  background: linear-gradient(90deg,#ffa15b, #ff7954);
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: flex-end;
  position: relative;
  flex-shrink: 0;
  .nav_custom_bar_back{
    position: absolute;
    bottom: 20px;
    left: 22px;
    &.hidden{
      display: none;
    }
  }
  .nav_custom_bar_title{
    font-size: 32px;
    font-family: Microsoft YaHei, Microsoft YaHei-Regular;
    font-weight: 400;
    text-align: left;
    color: #f7f7f7;
    margin-bottom: 20px;
  }
}

调用

import DemandDetail from '@/components/DemandDetail/index'
...
 <NavCustomBar
 needBackIcon={true}
 mainTitle={'需求详情'}
 />
 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Taro编译微信小程序实现顶部自定义导航栏 的相关文章

  • [javascript]canvas 热点区域图,框选区域并在区域显示热点

    需求 设置人员需要在图片上框选区域 并且后台针对区域读出数据后显示热点 做法 直接上代码 作者 jww dragon 163 com 依赖 jquery var goog function tag this hotpoint this sq
  • 时序预测

    时序预测 Python实现XGBoost极限梯度提升树股票价格预测 目录 时序预测 Python实现XGBoost极限梯度提升树股票价格预测 预测效果 基本描述 环境配置 模型描述 程序设计 参考资料 预测效果 基本描述 Python实现X
  • 【VBScript恶搞代码】关不掉的窗口

    前言 编写vbs脚本没有什么特定要求 只要有系统带了WSH环境就可以 千言万语汇成一句话 有手就行 效果图 操作步骤 先打开记事本 win R打开运行窗口 输入notepad 回车 在记事本上粘贴下列内容 WScript Echo 嘿 谢谢

随机推荐

  • 【算法

    Leetcode206 反转链表 给你单链表的头节点 head 请你反转链表 并返回反转后的链表 示例 1 输入 head 1 2 3 4 5 输出 5 4 3 2 1 示例 2 输入 head 1 2 输出 2 1 示例 3 输入 hea
  • 通过CPUID指令读取处理器信息

    一 CPUID简介 CPUID操作码是一个面向x86架构的处理器补充指令 它的名称派生自CPU识别 作用是允许软件通过CPUID指令读取处理器的详细信息 二 CPUID基本原理 CPUID有很多function号 每个号代表一个功能 CPU
  • nginx 之 Http 请求处理的11个阶段

    处理的11个阶段 POST HEAD realip SERVER REWRITE rewrite FIND CONFIG REWRITE rewrite POST REWRITE PREACCESS limit conn limit req
  • 通过使用Mybatis插件来实现数据的分页功能

    目录 背景 一 SpringBoot的后端 1 手动拼接SQL来实现 2 使用Mybatis插件来实现 二 Vue cli的前端 请求响应跟踪 三 在使用Mybatis插件进行多表查询 表数大于2 出现的问题 1 SQL解决 2 后端查询方
  • 毕设教学:Yolo v5 (v6.1)解析(二)

    Yolo v5 v6 1 解析 二 本文对YOLOv5模型的detect py文件内容进行了详细阐述 笔者以后会定期讲解关于模型的其他的模块与相关技术 笔者也建立了一个关于目标检测的交流群 781334731 大家也可扫描底部图片加入 欢迎
  • java软件官网下载汇总——JDK,eclipse,mysql,maven,idea,Git,oracle

    说明 最近换了一台电脑 所以很多软件都要重新安装 边安装边思考我不如把所有软件的下载官网记录下来 以后就不用到处找了 直接在这篇博文里看就行了 这篇博文没有具体的下载链接 只是官网 因为如果真的不记得进了官网怎么点 那确实也应该复习一下 就
  • 学习1(Linunx操作系统_前期安装)

    1 安装虚拟机 vm12 我下载的是这个版本 vmware workstation full 12 1 0 3272444 exe 下载地址 https www xinsaisai com vmware workstation full 1
  • keep-alive源码解析及实现原理

    keep alive源码 vue 2 6 10 在src core components keep alive js中 代码分析 export default name keep alive abstract true 抽象组件 props
  • 解决Mac应用程序软件不出现在Launchpad里面的方法

    新装了几个软件 可是打开Lauchpad之后却在里面找不到 尝试重置Launchpad方式 1 分别输入终端命令即可 rm Library Application Support Dock db killall Dock
  • ASP.NET 清除模式窗口数据缓存

    使用模式窗口showModalDialog 弹出页面在asp net中经常用到 用的最多的就是点击 修改 按钮 弹出修改页面 修改成功之后 关闭修改页面 刷新父页面 目前存在的一个问题是 刷新完父页面之后 再点击修改按钮弹出修改页面 修改页
  • Java 枚举

    枚举的每一个成员变量就是枚举类型自身的一个实例 枚举的实例在编译的时候就能确定枚举类型有多少个 实例对象 每一个枚举都继承自java lang Enum类 枚举的每个成员默认都是 public static final 的 当定义一个 枚举
  • gf框架使用sqlite3数据库后交叉编译cgo适配arm64-linux

    gf框架使用sqlite3数据库后交叉编译cgo适配arm64 linux 文章目录 gf框架使用sqlite3数据库后交叉编译cgo适配arm64 linux 1 前言 2 解决方案 3 wsl Windows交叉编译cgo工程 3 1
  • 期末考试复习笔记(标红表示重要)

    目录 相关系数的比较 数据的类型 回归模型的统计检验与统计意义 参数检验 非参数检验 统计距离 量表 李克特量表 权重 聚类图分析 聚类分析简介 聚类的用途 聚类方法 两步聚类法 TwoStep Cluster 箱线图分析 中心位置的作用
  • Redis数据类型-List

    一 概述 Java中 数组 Arraylist 链表 linkedList 数组的特点 根据索引取值速度是极快的 和数据量的大小无关 数组的增删改查 效率极低 数据量越大 效率越低 链表的特点 链表的元素增删 效率极高 和数据量的大小无关
  • 超详细!Jmeter性能测试(一)

    Jmeter 性能测试 一 首先开发会给你一个接口文档 我们这边是做支付方面的 所以我们要求给下单支付接口做下压测 由于我们这边接口都是有加密参数的 所以都是直接在JAVA工程包里直接跑的 因为这次是做压测 所以我们要用上Jmeter这个工
  • VC++ OpenCV4.x二维码识别

    自OpenCV4 x开始 二维码识别已经悄然进入 再也不用看zbar脸色了 以下是官网发布的源码 include opencv2 objdetect hpp include opencv2 imgproc hpp include openc
  • Node.Js篇 NodeJs使用MongoDB

    目录 介绍 概念解析 安装 启动时注意事项 NodeJs操作Mongo 介绍 MongoDB 是一个基于分布式文件存储的数据库 由 C 语言编写 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 MongoDB 是一个介于关系数据库和
  • 酷开科技打造更好体验服务用户

    智能电视以其海量资源 智慧大屏 高清画质等特点在国内快速普及 然而 随着用户量的增加 用户群体的需求多元化 导致消费者对智能电视的应用要求越来越高 不仅希望智能电视内容丰富 最好还能拥有 多合一 的功能 好在 一些科技企业关注到市场痛点 致
  • 全连接层、卷积层、深度可分离卷积的参数量计算

    一 全连接层参数的计算 若输入大小为32 32 3的图片 第一层全连接层有500个节点 则地一层全连接网络的个参数量为 32 32 3 500 500 约为150万个参数 参数量多 导致计算速度缓慢且容易造成过拟合 于是卷积操作便横空出世
  • Taro编译微信小程序实现顶部自定义导航栏

    需求 使用taro开发微信小程序的过程中 涉及到小程序的需要自定义顶部导航栏 导航栏渐变色 微信小程序中只能够设置固定的颜色 渐变颜色以及添加其他按钮的操作就不能够通过小程序自带的api来实现 思路 配置自定义导航栏设置 获取顶部状态栏高度