uniapp和vue3+ts实现自定义头部导航栏左侧胶囊内容

news2024/11/16 13:46:03

由于某些原因,可能需要我们自己定义头部导航栏的内容,实现各种设计师画的设计稿,所以就需要这个自定义的组件,实现的内容:自定义标题和左侧胶囊图标内容,也可以自定义搜索内容到里面,实现的效果图:

实现步骤

1.先在pages中将这个页面的导航设置为自定义

 "navigationStyle": "custom"

2.在app.vue中获取头部高度

源代码:

<script setup lang="ts">
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
onLaunch(() => {
  console.log("App Launch");
  uni.hideTabBar()
});
onShow(() => {
  console.log("App Show");
  // 隐藏默认导航栏
  uni.hideTabBar()
  // 获取顶部状态栏高度
  uni.getSystemInfo({
    success: (result) => {
      // 获取手机系统的状态栏高度(不同手机的状态栏高度不同)  ( 不要使用uni-app官方文档的var(--status-bar-height) 官方这个是固定的20px  不对的 )
      console.log('当前手机的状态栏高度',result.statusBarHeight)
      let statusBarHeight = result.statusBarHeight + 'px'

      // 获取右侧胶囊的信息 单位px
      const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
      //bottom: 胶囊底部距离屏幕顶部的距离
      //height: 胶囊高度
      //left:   胶囊左侧距离屏幕左侧的距离
      //right:  胶囊右侧距离屏幕左侧的距离
      //top:    胶囊顶部距离屏幕顶部的距离
      //width:  胶囊宽度
      // console.log(menuButtonInfo.width, menuButtonInfo.height, menuButtonInfo.top)
      // console.log('计算胶囊右侧距离屏幕右边距离', result.screenWidth - menuButtonInfo.right)
      let menuWidth = menuButtonInfo.width + 'px'
      let menuHeight = menuButtonInfo.height + 'px'
      let menuBorderRadius = menuButtonInfo.height / 2 + 'px'
      let menuRight = result.screenWidth - menuButtonInfo.right + 'px'
      let menuTop = menuButtonInfo.top + 'px'
      let contentTop = result.statusBarHeight + 44 + 'px'

      let menuInfo = {
        statusBarHeight: statusBarHeight,//状态栏高度----用来给自定义导航条页面的顶部导航条设计padding-top使用:目的留出系统的状态栏区域
        menuWidth: menuWidth,//右侧的胶囊宽度--用来给自定义导航条页面的左侧胶囊设置使用
        menuHeight: menuHeight,//右侧的胶囊高度--用来给自定义导航条页面的左侧胶囊设置使用
        menuBorderRadius: menuBorderRadius,//一半的圆角--用来给自定义导航条页面的左侧胶囊设置使用
        menuRight: menuRight,//右侧的胶囊距离右侧屏幕距离--用来给自定义导航条页面的左侧胶囊设置使用
        menuTop: menuTop,//右侧的胶囊顶部距离屏幕顶部的距离--用来给自定义导航条页面的左侧胶囊设置使用
        contentTop: contentTop,//内容区距离页面最上方的高度--用来给自定义导航条页面的内容区定位距离使用
      }
      uni.setStorageSync('menuInfo', menuInfo)
    },
    fail: (error) => {
      console.log(error)
    }
  })
});
onHide(() => {
  console.log("App Hide");
});
</script>
<style lang="scss">
@import "uview-plus/index.scss";
@import "./uni.scss";
</style>

3.实现自定义头部组件

源代码: 

<template>
  <view class="page_box">
    <!-- 行内式直接变量小程序不支持,故需要写成动态的变量 -->
    <view class="my_tab_title" :style="{ paddingTop: statusBarHeight }">
      <!-- 左侧自定义胶囊 -->
      <view class="menu_btn"
        :style="{ position: 'fixed', top: menuTop, left: menuRight, width: menuWidth, height: menuHeight, border: '1rpx solid #ddd', borderRadius: menuBorderRadius, }">
        <u-icon @click="goToBack" class="arrowleft" name="arrow-left" color='#fff' size="20"></u-icon>
        <text class="text_box"></text>
        <u-icon @click="goToHome" class="home" name="home" color='#fff' size="20"></u-icon>
      </view>
      <!-- 自定义标题 -->
      <text class="title">今日战绩</text>
    </view>
  </view>
</template>


<script setup lang="ts">

const statusBarHeight = uni.getStorageSync('menuInfo').statusBarHeight
//状态栏的高度(可以设置为顶部导航条的padding-top)
const menuWidth = uni.getStorageSync('menuInfo').menuWidth
const menuHeight = uni.getStorageSync('menuInfo').menuHeight
const menuBorderRadius = uni.getStorageSync('menuInfo').menuBorderRadius
const menuRight = uni.getStorageSync('menuInfo').menuRight
const menuTop = uni.getStorageSync('menuInfo').menuTop
// 距离顶部的距离,可以设置为内容区域的顶部外边距
const contentTop = uni.getStorageSync('menuInfo').contentTop

const goToBack = () => {
  console.log("返回按钮");
  uni.navigateBack({
    delta: 1
  })
}

const goToHome = () => {
  console.log("返回主页");
  uni.switchTab({
    url: '/pages/home/index'
  })
}

</script>

<style lang="scss" scope>
.page_box {
  .my_tab_title {
    width: 100%;
    height: 44px; //这个是固定的44px(所有小程序顶部高度都是 = 44px + 手机系统状态栏高度)
    line-height: 44px;
    text-align: center;
    position: fixed;
    top: 0;
    z-index: inherit;
    font-family: Monospaced Number, Chinese Quote, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, PingFang SC, Hiragino Sans GB, Microsoft YaHei,
      Helvetica Neue, Helvetica, Arial, sans-serif !important;
    font-size: 32rpx;
    color: #000;
    font-weight: 500;

    .menu_btn {
      // background-color: #ffffff; //这个是小程序默认的标题栏背景色
      overflow: hidden;
      background: rgba(158, 151, 164, 0.5);


      // position: fixed;//行内式写了固定定位--目的是去掉下划页面一起滚动问题
      .arrowleft {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-160%, -50%) !important;
        -webkit-transform: translate(-160%, -50%) !important;
      }

      .text_box {
        width: 1rpx;
        height: 20px;
        background-color: #fff;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%) !important;
        -webkit-transform: translate(-50%, -50%) !important;
      }

      .home {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(60%, -50%) !important;
        -webkit-transform: translate(60%, -50%) !important;
      }
    }

    .title {
      color: white;
      font-weight: 700;
    }
  }
}
</style>

4.在组件中使用

最终的效果: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1270930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络和Linux网络_7(传输层)UDP和TCP协议(端口号+确认应答+超时重传+三次握手四次挥手)

目录 1. 重看端口号 1.1 端口号的概念 1.2 端口号的划分 2. 重看UDP协议 2.1 UDP协议格式 2.2 UDP的特点 3. 重看TCP协议 3.1 TCP协议格式 3.2 TCP的解包分用 3.3 TCP的可靠性及机制 3.3.1 确认应答ACK机制 3.3.2 超时重传机制 3.3.3 连接管理机制&#xff08;三次…

HCIP-十三、BGP综合选路

十三、BGP综合选路 实验拓扑实验需求及解法1.预配置包括2.在所有设备的系统视图下配置全局router id为Loopback0地址。3.内部网关协议IGP4.建立BGP邻居5.发布BGP路由6.协议优先级选路7. 权重&#xff08;PrefVal&#xff09;选路8.本地优先&#xff08;LocPrf&#xff09;选路9…

linux 消息队列apache-activemq服务的安装

1.下载 官网下载地址&#xff1a;https://activemq.apache.org/ 操作如下&#xff1a; 2. 解压 执行&#xff1a;tar -zxvf apache-activemq-5.18.3-bin.tar.gz -C /user/ 3. 进入目录 执行&#xff1a;cd /user/apache-activemq-5.18.3 4.修改配置文件 执行&#xff1…

【分享】centos7vim异常

问题描述: 虚拟机安装centos7&#xff0c;安装vim后异常&#xff0c;上下左右键会变成abcd,退格键无法删除。 系统版本: CentOS Linux release 7.5.1804 (Core) 原因: 暂时未知&#xff0c;有可能是vim安装时&#xff0c;一个组件未安装导致。后续追溯 解决方案: echo &quo…

豆粕期权 MVIX 指数构建及策略回测

1. VIX指数 VIX 最初被设计出来的目的是为了预警市场的潜在风险&#xff0c;一般来说&#xff0c;当 VIX 指数小于 15 时&#xff0c;表示市场出现非理性繁荣&#xff1b;当 VIX 指数大于 40 时&#xff0c;表示市场对 未来的非理性恐慌&#xff0c;短期内可以出现反弹。VIX 指…

【经验分享】openGauss 客户端(Data Studio / DBeaver)连接方式

前言 本篇介绍了openGauss常用的客户端连接工具Data Studio和DBeaver 01 客户端工具 openGauss部署之后&#xff0c;在服务器上提供了在命令行下运行的数据库连接工具gsql。此工具除了具备操作数据库的基本功能&#xff0c;还提供了若干高级特性&#xff0c;便于用户使用。…

HAProxy部署Web集群(Nginx)实验

实验前准备 HAProxy服务器&#xff1a;192.168.188.11 内核版本最好要在2.6以上&#xff0c;使用uname -r查看自己的内核版本是否适用 Nginx服务器1&#xff1a;192.168.188.12 Nginx服务器2&#xff1a;192.168.188.13 客户端&#xff1a;192.168.188.1&#xff08;本机window…

最新报告!11月美国市场的“遥遥领先”来了,该爆的单总会来!

今年周期最长的大促节点已接近尾声&#xff0c;美区市场的11月份的商品销售战绩已全面来袭&#xff1a; 保健类目竟弯道超车&#xff0c;交出了将近翻倍的成绩单&#xff1b;美妆个护、女装与女士内衣等“她经济”类目持续高涨且“辣眼”单品不断&#xff1b;家居大类目下的市…

RocketMQ两主两从部署搭建

安装部署 1.1 部署环境 1.2 安装要求 建议使用64位操作系统&#xff0c;建议使用Linux / Unix / Mac&#xff1b; 64位JDK 1.8; Maven 3.2.x;&#xff08;非必要&#xff09; Git&#xff1b;&#xff08;非必要&#xff09; 1.3 获取rocketmq安装包&#xff0c;并解压 下载官…

基于Java SSM框架+Vue实现房屋租赁网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现房屋租赁网站演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际运用为开发背景&…

宝宝洗衣机买几公斤?高性价比婴儿专用洗衣机推荐

宝宝的抵抗力还比较弱&#xff0c;如果把大人的衣服跟宝宝的混洗&#xff0c;衣服上一旦沾上大人衣服上的细菌可能会导致宝宝生病再者&#xff0c;需要的清洗剂不一样&#xff0c;一般选择宝宝的洗衣液时会选择宝宝专用的低敏洗衣液&#xff0c;这样可以有效防止宝宝的皮肤过敏…

arcgis导出某个属性的栅格

选中栅格特定属性想要导出时&#xff0c;无法选中“所选图形” 【方法】spatial analyst 工具——提取分析——按属性提取

fiddler抓包安卓

一、打断点 1、安卓手机和电脑在同一局域网下&#xff0c;手机连接的网络开启手动代理&#xff0c;ip填写电脑ip&#xff0c;端口填写fiddler中配置的端口。 ip查看&#xff1a; 端口配置&#xff1a;tools-options-connections 2、安装证书&#xff0c;手机浏览器输入电脑ip…

盘点68个Android系统源码安卓爱好者不容错过

盘点68个Android系统源码安卓爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 源码下载链接&#xff1a;https://pan.baidu.com/s/1FcBxCe7KpJsh0zFxNZ_7wg?pwd8888 提取码&#xff1a;8888 项目名称 Android …

PyQuery库编写下载代码示例

python import requests from pyquery import PyQuery as pq # 设置 proxies { "http": "", "https": "" } # 使用requests.get()方法获取网页内容 response requests.get() # 使用PyQuery解析网页内容&#xff0c;获取视…

编码未来已然来临:无代码、低代码助力软件驱动世界

在当今时代&#xff0c;企业无不致力于探寻能够实现降本增效的有效路径。在众多热门技术中&#xff0c;AI人工智能和机器学习等概念已经被广泛采纳并应用于各行业的实际业务场景中。当企业开始树立起数字化意识&#xff0c;他们通常会选择以下两条路径中的一条来实现数字化转型…

element table滚动到底部加载数据(vue3)

效果图 使用插件el-table-infinite-scroll npm install --save el-table-infinite-scroll局部导入 <template><div class"projectTableClass"><el-table v-el-table-infinite-scroll"load"></el-table></div> </temp…

内存泄漏检测工具valgrind

示例&#xff1a; class Person { public:Person(int age){//将年龄数据开辟到堆区m_Age new int(age);}//重载赋值运算符 写法2 此代码在linux测试Person& operator(Person& p){*m_Age *p.m_Age; //通过linux下valgrind工具检测&#xff0c;无内存泄漏情况。//此语…

手把手教你写IP地址规划方案

中午好&#xff0c;我的网工朋友。 IP地址的合理规划是网络设计的重要环节&#xff0c;大型计算机网络必须对IP地址进行统一规划并得到有效实施。 IP地址规划的好坏&#xff0c;不仅会影响到网络路由协议算法的效率&#xff0c;还会影响到网络的性能&#xff0c;网络的扩展&a…

快手自动评论助手:开发流程与所需技术的深度解析

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着互联网的发展&#xff0c;越来越多的人开始使用快手这款短视频平台。在这个平台上&#xff0c;用户可以分享自己的生活点滴&#xff0c;观看他人的精彩瞬间。然而&am…