小程序自定义导航栏

news/2024/12/2 15:42:55/

效果图

在这里插入图片描述

代码

app.json文件下

"window":{"navigationStyle": "custom" //增加此属性},

app.js文件

//计算高度
App({onLaunch() {wx.getSystemInfo({ // 获取设备信息success: (res) => {this.globalData.systeminfo = res//导航栏let statusBarHeight = res.statusBarHeight // 状态栏高度let headerPosi = wx.getMenuButtonBoundingClientRect()  // 胶囊位置信息let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点height: headerPosi.height,width: headerPosi.width,// 胶囊top - 状态栏高度top: headerPosi.top - statusBarHeight,// 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,// 屏幕宽度 - 胶囊rightright: res.screenWidth - headerPosi.right}// 原胶囊bottom + 现胶囊bottomthis.globalData.navbarHeight = headerPosi.bottom + btnPosi.bottom this.globalData.statusBarHeight = statusBarHeight this.globalData.navbarBtn = btnPosi wx.setStorageSync('navbarHeight', this.globalData.navbarHeight)},})// 获得胶囊按钮位置信息this.globalData.headerBtnPosi = wx.getMenuButtonBoundingClientRect()},globalData: {headerBtnPosi: {} ,// 胶囊按钮位置信息navbarHeight: 0,statusBarHeight: 0,navbarBtn: 0}
})

组件文件components文件夹下新增navBar文件
index.js

// components/navBar/index.js
const app = getApp();
Component({/*** 组件的属性列表*/properties: {navbarData: { // 由父页面传递的数据type: Object,value: {position:'true'},observer: function (newVal, oldVal) { }}},/*** 组件的初始数据*/data: {navbarHeight: app.globalData.navbarHeight, // 顶部导航栏高度navbarBtn: app.globalData.navbarBtn,statusBarHeight: app.globalData.statusBarHeight ,// 状态栏高度imgStatus: true},/*** 生命周期函数--监听页面加载*/onLoad(options) {console.log("nav",this.data.navbarHeight, this.data);let statusBarHeight = app.globalData.systeminfo.statusBarHeight // 状态栏高度let headerPosi = app.globalData.headerBtnPosi // 胶囊位置信息let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点height: headerPosi.height,width: headerPosi.width,// 胶囊top - 状态栏高度top: headerPosi.top - statusBarHeight,// 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,// 屏幕宽度 - 胶囊rightright: app.globalData.systeminfo.screenWidth - headerPosi.right}this.setData({navbarHeight: headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottomstatusBarHeight: statusBarHeight,navbarBtn: btnPosi,})console.log("nav",this.data.navbarHeight);// this.triggerEvent('updateData',{cardIssuersCode:this.data.navbarHeight})console.log("navbarHeight",this.data.navbarHeight)console.log("navbarBtn-top",this.data.navbarBtn.height)console.log("navbarBtn-height",this.data.navbarBtn.top)console.log('jksjdfkjkfsf')},lifetimes: {attached: function(options) {// 在组件实例进入页面节点树时执行}},/*** 组件的方法列表*/methods: {_goBack: function () {let pages = getCurrentPages();if(pages.length==1) {wx.switchTab({url: '/pages/index/index',});return;}wx.navigateBack({delta: 1});}}
})

index.wxss

.container {width: 100%;height: 100px;z-index: 1000;
}
.navBar {display: flex;align-items: flex-start;justify-content: center;width: 100%;
}
.navBar .navImg {position: absolute;left: 33rpx;display: flex;align-items: center;z-index: 10;
}
.navBar .navImg .img {width: 50rpx;height: 50rpx;
}
.navBar text {font-size: 35rpx;
}
.textTitle {font-weight: bold;
}
.navBarPosition {width: 100%;height: 100px;position: fixed;z-index: 1000;
}
.img {width: 100%;height: 100%;object-fit: cover;
}
.textColor {color: white;position: absolute;width: 672rpx;text-align: center;font-weight: bold;
}
.navText {position: absolute;width: 672rpx;text-align: center;font-weight: bold;
}

index.wxml

<view class="navBar {{navbarData.position?'navBarPosition':''}}" style="height: {{navbarHeight}}px;"><view class="navImg" style='margin-top: {{statusBarHeight}}px;top: 18rpx' >//左箭头图标自己更换本地文件<image src="/assets/images/make/back.png" bindtap="_goBack" wx:if="{{imgStatus}}" class="img"></image><image src="http://res.ctmus.cn/festival-h5.v19/resource/2022/11/29/580c1edc-cb7d-4726-b3bc-aabdc397820b.png" bindtap="_goBack" style="width: 40rpx; height: 40rpx;" wx:else=""></image></view><view  style='line-height:{{navbarBtn.height + navbarBtn.top}}px;margin-top: {{statusBarHeight}}px; top: 8rpx' class="{{imgStatus ? 'navText' : 'textColor'}}" ><text class="textTitle">{{navbarData.title }}</text></view><!-- <view style="background-color: pink; height: 500rpx;"></view> -->
</view>

使用

<navBar navbarData="{{navbarData}}"></navBar>

js

Page({data: {navbarData: {// 是否显示左上角胶囊按钮 1 显示 0 不显示title: '选择视频模板' // 导航栏 中间的标题},},})

http://www.ppmy.cn/news/976669.html

相关文章

pytorch安装GPU版本 (Cuda12.1)教程: Windows、Mac和Linux系统快速安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

分享一个开源的Base64解码编码工具站源码

base64.kr 网址&#xff1a;base64.kr GIT 地址&#xff1a;base64.kr 背景 我喜欢(or 我需要) 作为程序员&#xff0c;平常工作中经常有用 Base64 解码调试程序的场景&#xff0c;这是 [我有需求] 其他用户有需要 然后之前几个月在 similarweb 看了下数据&#xff0c;当…

【顺序表的增删查改】

顺序表的增删查改 // SeqList.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h>typedef int SLDateType; typedef struct SeqList {SLDateType* a;int size;int capacity; }SeqList;// 对数据的管理:增删查改 void SeqListInit…

红包雨架构的设计汇总

一 微服务总体架构 1.1 微服务总体架构 1.2 红包雨的流程 1.3 发红包的内容 1.3.1 概述流程 1.发红包-》抢红包。 1.所有人签到的金额之和等于红包总金额。2.每个人至少抢到一分钱&#xff1b;3.保证所有人抢到金额的几率相等。 1.3.2 拆分红包通用流程算法 其中拆红包最…

java开发岗位简历模板

Garry 1xx-xxxx-xxxx Java开发、数据库设计、脚本编写 xxxx592.com 求职意向 Java工程师 专业技能 c, oracle, sql server, mysql, javascript 熟练 java认证考试 初级程序员 全国计算机软件技术资格与水平考试 助理工程师 windows系统, linux系统 熟练 大学英…

MySQL 读写分离

目录 一、什么是读写分离&#xff1f; 二、为什么要读写分离呢&#xff1f; 三、什么时候要读写分离&#xff1f; 四、主从复制与读写分离 五、MySQL 读写分离原理 六、企业 使用MySQL 读写分离场景 1&#xff09;基于程序代码内部实现 2&#xff09;基于中间代理层实现…

华为鸿蒙HarmonyOS 4定档8月;ChatGPT之父的加密货币正式上线;微软必应聊天将推出重新生成答案功能|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

echarts自定义tooltip,给tooltip增加百分号%

1.formatter为回调函数&#xff1a; 支持返回 HTML 字符串或者创建的 DOM 实例。 (params: Object|Array, ticket: string, callback: (ticket: string, html: string)) > string | HTMLElement | HTMLElement[] 在 trigger 为 ‘axis’ 的时候&#xff0c;或者 tooltip 被…