【vue3+Typescript】手撸了一个轻量uniapp导航条

最近公共组件写到导航条,本来打算拿已有的改。看了下uniapp市场上已有的组件,一是不支持vue3+typescript,二是包装过重。索性自己手撸了一个导航条,不到100行代码全部搞定,因为自己的需求很简单:

1)遵循28原则,能覆盖80%以上导航需求即可,特殊需要单独写代码

2)适配状态条和小程序胶囊区高度

3)默认浮动定位(滚动贴顶),可以指定样式修改为非浮动。这个不用添加额外代码,直接在组件使用时指定css即可

4)支持大/中/小标题

5)支持中间和右边占位组件,中间可以放个搜索框什么。右边可以放

6)支持背景图片,这个不用额外添加代码,直接在使用时指定css即可,默认背景透明,背景渐变色也是通过css自己去指定

7)支持更改左侧的导航图片,有时候要深色样式,就要换个返回按钮svg图片了

8)支持返回多步或跳转首页。具体场景在代码里有注释

组件全部代码(unibest框架下,否则可能要自己导入vue一些公共方法):

<template><view class="fixed left-0 right-0 top-0"><view :style="{ height: statusBarHeight + 'px' }" /><view class="x-items-center" :style="{ height: navbarHeight }"><view class="flex-center w-80rpx" @click="doBack"><image :src="props.backImgUrl" class="w-40rpx h-40rpx" /></view><slot><view class="flex-1 text-center" :style="_titleStyle">{{ props.title }}</view></slot><slot name="right"><div class="w-80rpx"></div></slot></view></view>
</template>
<script lang="ts" setup>
import type { CSSProperties } from 'vue'type CustomCSSProperties = CSSProperties & {fontSize?: string // 允许使用 rpx 等自定义单位
}// 获取状态栏高度
const { statusBarHeight } = uni.getSystemInfoSync()const props = withDefaults(defineProps<{title?: string // 指定标题内容titleStyle?: CustomCSSProperties // 指定标题样式titleSize?: 'small' | 'medium' | 'large' // 指定标题文本大小titleColor?: string // 指定标题颜色backImgUrl?: string // 指定返回按钮图片backMode: 'back' | 'home' | number // 指定返回按钮的回退模式/*** 回退模式backMode:* back: 默认回退,一般用于返回上一页* home: 跳转到首页(/pages/index/index且不可返回),一般用于例如支付完成的跳转* number: 回跳指定数量页面,一般用于多步流程跳转到流程第一页*/}>(),{title: '标题',titleStyle: () => ({fontSize: '32rpx', // 自定义单位fontWeight: 500}),titleSize: 'medium',titleColor: '#333333',backImgUrl: '/static/images/back-b.svg',backMode: 'back'}
)const _titleStyle = computed(() => {return {...props.titleStyle,fontSize:props.titleSize === 'small' ? '32rpx' : props.titleSize === 'large' ? '48rpx' : '40rpx',color: props.titleColor}
})const navbarHeight = computed(() => {// 只处理安卓/IOS/微信小程序if (process.env.VUE_APP_PLATFORM === 'mp-weixin') {const menuButtonInfo = uni.getMenuButtonBoundingClientRect()return menuButtonInfo.height + (menuButtonInfo.top - statusBarHeight) * 2 + 2 + 'px'} else {return '80rpx'}
})const doBack = () => {if (props.backMode === 'home') {uni.reLaunch({url: '/pages/index/index'})} else if (props.backMode === 'back') {uni.navigateBack()} else {uni.navigateBack({delta: props.backMode})}
}
</script>

标准用法效果:

<cc-navbar class="relative bg-amber" title="选择功能" />

效果:

添加中间和右边组件:

    <cc-navbar class="bg-amber"><view class="flex-1"><up-button>点我点我</up-button></view><template #right><text>右边的东西</text></template></cc-navbar>

效果:

默认的back-b.svg文件:

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1722612224491" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8436" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M789.048889 886.613333l-80.213333 80.213334L254.520889 512.512 255.032889 512l-0.512-0.483556L708.835556 57.173333l80.213333 80.213334L414.435556 512l374.613333 374.613333z" fill="#515151" p-id="8437"></path></svg>

还有个深色主题的back-w.svg,修改下上面的fill颜色值即可

x-items-center和flex-center是自己的tailwindcss快速组合样式:

.x-items-center {

  // 水平排列,垂直居中

  @apply flex flex-row items-center;

}

.flex-center {

  // 完全居中,使用flex定位

  @apply flex justify-center items-center;

}

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

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

相关文章

Python模块篇(五)

模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用&#xff08;如&#xff1a;pip工具&#xff09; 模块与包 模块是一个包含 Python 代码的文件&#xff0c;通常以 .py 作为扩展名。一个模块可以包含函数、类、变量&#xff0c;以及可执行的代码段。模块的…

pycharm2023.1破解

下载解压文件&#xff0c;文件夹 /jetbra 复制电脑某个位置 注意&#xff1a; 补丁所属文件夹需单独存放&#xff0c;且放置的路径不要有中文与空格&#xff0c;以免 Pycharm 读取补丁错误。 点击进入 /jetbra 补丁目录&#xff0c;再点击进入 /scripts 文件夹&#xff0c;双…

leetcode_55. 跳跃游戏

55. 跳跃游戏 题目描述&#xff1a;给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量&#xff0c;以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义&#xff0c;是一把自动旋转的锁&#xff0c;这很像厕所里的锁&#xff0c;进入前标记是绿色可用的&#xff0c;进入格子间后&#xff0c;手一带&#xff0c…

10分钟学会LVM逻辑卷

华子目录 前言认识LVMLVM基本概念LVM整体流程LVM管理命令pvs&#xff0c;vgs&#xff0c;lvs命令pvs基本用法选项示例 vgs基本用法选项示例 lvs基本用法 pvcreate&#xff0c;vgcreate&#xff0c;lvcreate命令pvcreate示例 vgcreate基本用法示例选项 lvcreate基本用法示例 pvr…

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫&#xff1f; 1.简单介绍爬虫 爬虫的全称为网络爬虫&#xff0c;简称爬虫&#xff0c;别名有网络机器人&#xff0c;网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序&#xff0c;为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术&#xff0c;将…

【电路笔记】-无源衰减器总结

无源衰减器总结 文章目录 无源衰减器总结1、概述2、L-型无源衰减器设计3、T-型无源衰减器设计4、桥接 T 型衰减器设计5、π型无源衰减器设计无源衰减器是一个纯电阻网络,可用于控制输出信号的电平。 1、概述 无源衰减器是一种纯电阻网络,用于削弱或“衰减”传输线的信号电平…

golang中defer的执行时间是什么时候?是在return前还是return后执行的?

在Go语言中&#xff0c;defer语句指定的函数调用会在包含它的函数即将完成时执行&#xff0c;具体来说&#xff1a; 执行时间&#xff1a;defer语句指定的函数在包含它的函数的返回值被确定后执行&#xff0c;但在该函数真正的返回操作之前执行。这意味着defer执行时&#xff0…

Element UI中报dateObject.getTime is not a function解决方法~

1、错误信息。 2、该报错原因是Element UI中日期组件的校验规则是type: "date",而一般我们从后台拿到的数据是字符串型的&#xff0c;不满足预期&#xff0c;就会报错。 3、解决方法。 去掉日子组件中的type: "date"校验规则即可。 rules: {newName: [{…

设计模式之Data Access Object

在软件开发中&#xff0c;应用程序通常需要与数据库进行交互&#xff0c;执行数据的读取、插入、更新和删除等操作。为了实现这些功能&#xff0c;开发者通常会使用特定的设计模式来组织代码&#xff0c;提高可维护性和可扩展性。Data Access Object&#xff08;DAO&#xff09…

【Python爬虫】技术深度探索与实践

目录 引言 第一部分&#xff1a;Python爬虫基础 1.1 网络基础 1.2 Python爬虫基本流程 第二部分&#xff1a;进阶技术 2.1 动态网页抓取 2.2 异步编程与并发 2.3 反爬虫机制与应对 第三部分&#xff1a;实践案例 第四部分&#xff1a;法律与道德考量 第五部分&#x…

EasyCVR视频汇聚平台:深度解析GB/T 28181协议下的视频资源整合与应用

随着安防技术的快速发展和智慧城市建设的推进&#xff0c;视频监控系统作为公共安全、城市管理、企业运营等领域的重要基础设施&#xff0c;其重要性和应用范围不断扩大。在这一过程中&#xff0c;GB/T 28181作为国家标准中关于视频监控设备通信协议的规范&#xff0c;正逐渐受…

C2M商业模式分析与运营平台建设解决方案(四)

C2M商业模式以消费者需求驱动生产制造&#xff0c;实现个性化与效率的双赢。本解决方案将围绕构建智能化、数据驱动的运营平台&#xff0c;通过精准把握市场需求、优化生产流程、强化供应链管理&#xff0c;打造高效、敏捷、柔性的C2M运营体系&#xff0c;助力企业快速响应市场…

python算法优化——functools.lru_cache

1. 优化算法的思想 当算法的复杂度较高时&#xff0c;常见的优化策略包括&#xff1a; 减少重复计算&#xff1a;通过缓存结果避免相同输入的重复计算。这种方法常用在递归和动态规划问题中。合理使用数据结构&#xff1a;根据具体问题&#xff0c;选择合适的数据结构&#x…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…

【电路笔记】-桥接 T 型衰减器

桥接 T 型衰减器 文章目录 桥接 T 型衰减器1、概述2、桥接 T 型衰减器示例 13、可变桥接 T 型衰减器4、完全可调衰减器5、可切换桥接 T 型衰减器Bridged-T 衰减器是另一种电阻衰减器设计,它是标准对称 T 垫衰减器的变体。 1、概述 顾名思义,桥接 T 形衰减器具有一个额外的电…

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题

Cesium模型制作&#xff0c;解决Cesium加载glb/GLTF显示太黑不在中心等问题 QQ可以联系这里&#xff0c;谢谢

Spring SSM框架--MVC

SSM框架–Mybatis 一、介绍 Spring 框架是一个资源整合的框架&#xff0c;可以整合一切可以整合的资源&#xff08;Spring 自身和第三方&#xff09;&#xff0c;是一个庞大的生态&#xff0c;包含很多子框架&#xff1a;Spring Framework、Spring Boot、Spring Data、Spring…

红与黑-计算可到达的瓷砖数

红与黑-计算可到达的瓷砖数 http://noi.openjudge.cn/ch0205/1818/ 思路&#xff1a; 1.从起点出发&#xff0c;往四个方向走 2.在范围内 路径通可以走&#xff0c;没走过&#xff0c;递归往下走 并记录走过步数 #include<bits/stdc.h> using namespace std;char s;…