uni-app实现自定义导航栏,兼容H5、App、微信小程序

这篇具有很好参考价值的文章主要介绍了uni-app实现自定义导航栏,兼容H5、App、微信小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多情况下,系统自带的导航栏无法满足UI设计的要求,这时候就需要我们自定义导航栏来实现需求,要考虑跨端的多种情况,这里我们封装成一个组件来使用,实现效果如下:

uniapp 自定义导航,uni-app,uni-app

一、H5、App、微信小程序的区别

1.H5:导航栏高度可以设为44px,它没有状态栏,因为H5端运行在浏览器中,浏览器已经处理了安全区;

总高度 = 44px

2.App:导航栏高度也是44px,它的状态栏高度是不一定的,每个机型的安全区是不一样尺寸,所以获取安全区高度来计算。

总高度 = 安全区高度 + 44px

3.微信小程序:导航栏高度和状态栏高度都与机型的尺寸有关,其中状态栏高度需要获取安全区高度来计算,导航栏高度需要获取小程序右上角的“胶囊”高度和top值来计算。

总高度 = 安全区高度 + 导航栏高度

导航栏高度 = 胶囊高度 + 上间距 + 下间距

上间距 = 下间距 =  胶囊.top - 状态栏高度

即:总高度 = 状态栏高度 + (胶囊高度 + (胶囊.top - 状态栏高度)*2)

二、在components中创建一个组件名称为 navbar,先展示组件完整代码

<template>
	<view class="navbar">
		<view class="fixed-content">
            <!-- 状态栏高度 -->
			<view :style="{'height': geStatusBarHeight + 'px'}"></view>
            <!-- 导航栏高度 -->
			<view class="bar-content" :style="{'height': getNavBarHeight()+'px'}">
				<slot>
					<image @tap="navigateBack()" class="nav-left" src="/static/img/common/arrow-left.png" mode=""></image>
					<view class="nav-title">{{ title }}</view>
				</slot>
			</view>
		</view>
		<!-- 占位高度,状态栏高度+导航栏高度,父组件就不需要计算导航栏高度 -->
		<view :style="{'height': geStatusBarHeight + getNavBarHeight() + 'px'}"></view>
	</view>
</template>
<script>
	export default {
		name:'Navbar',
		props:{
			title:{
				type: String,
				default:''
			}
		},
        methods: {
            // 获取状态栏高度
			geStatusBarHeight(){
			    return uni.getSystemInfoSync()['statusBarHeight']
			},
            // 获取导航栏高度
            getNavBarHeight(){
                // #ifdef MP-WEIXIN
		        let menuButtonInfo = uni.getMenuButtonBoundingClientRect()
                // 导航栏高度 = 胶囊高度 + 上间距 + 下间距 + 微调	(menuButtonInfo.top - uni.getSystemInfoSync()['statusBarHeight'] = 上间距)	        
                let navbarHeight = menuButtonInfo.height + (menuButtonInfo.top - uni.getSystemInfoSync()['statusBarHeight']) * 2 + 2
		        // #endif
		        // #ifdef APP-PLUS || H5
		        let navbarHeight = 44
		        // #endif
		        return navbarHeight
            },
            navigateBack(){
                uni.navigateBack()
            }
        }
	}
</script>
<style lang="scss" scoped>
	.navbar{
		.fixed-content {
			position: fixed;
			top: 0;
			left: 0;
			width: 100%;
			padding: 0 24rpx;
			z-index: 1996;
			.bar-content{
				display: flex;
				align-items: center;
				position: relative;
				.nav-left{
					width: 22px;
					height:22px;
					position: absolute;
					z-index: 2;
					top: 50%;
					transform: translateY(-50%);
				}
				.nav-title{
					color: #fff;
					font-weight: bold;
					font-size: 16px;
					width: 100%;
					position: absolute;
					top: 50%;
					transform: translateY(-50%);
					text-align: center;
				}
			}
		}
	}
</style>

三、在页面中使用组件

1.直接使用默认样式,将和系统导航栏一致。

<navbar></navbar>

2.slot 替换默认的样式。

<navbar>
    <!-- slot 替换默认的样式 -->
    <view class="status-bar-box">
        <view class="select-city">
             <image src="/static/img/index/icon-city.png"></image>
             <view class="">杭州市</view>
        </view>
        <view class="status-bar-title">汽车租赁</view>
    </view>
</navbar>

四、扩展

一开始导航栏背景是透明的,是根据页面的背景图来呈现。那么滚动的时候就不是很友好了,这时候我们可以加一个滚动阈值,让导航栏变成白色背景,文字黑色。类似如下效果:

uniapp 自定义导航,uni-app,uni-app文章来源地址https://www.toymoban.com/news/detail-849353.html

到了这里,关于uni-app实现自定义导航栏,兼容H5、App、微信小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app自定义微信小程序头部导航栏

    目录 一、子组件代码 1、完整子组件代码  2、子组件配置项Props  二、父组件引用代码  1 、将头部导航注册成全局组件(main.js) 2、获取设备信息(App.vue) 3、页面导入自定义导航组件 (3-1)、默认配置效果图例 (3-2)、更改配置效果图例  1、完整子组件代码  2、子组件

    2024年02月03日
    浏览(37)
  • uni-app滚动分页 兼容(App 小程序 H5)

    因为手机端本身屏幕空间不大 所以大家一般都会选择用滚动分页 首先 我在根目录下创建了一个 api目录 下面创建了一个bookApi.js 其中写了一个请求函数 getBookList 根据当前页 page 和 每页展示多少条 pageSize 获取数据 那么 我的组件代码是这样的 首先 我们肯定要引入bookApi.js中的

    2024年02月16日
    浏览(35)
  • uni-app实现点击显示隐藏列表,兼容微信小程序

    效果:    小程序打印的结果:值一直为true   如果你试过v-if不生效,又试了v-show,还是不行!!千万不要着急! 不是自己写的不对,而是uni-app和微信小程序修改值的方式不一致造成的。反正就是不承认是自己的问题。 其实解决的办法也很简单,就是要兼容两端,写出符合

    2024年02月09日
    浏览(44)
  • Uni-app实现左右滑动页面内容切换(兼容微信小程序)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档         前言         整体思路         一、HTML部分         二、Script部分         三、Style部分           (先声明哦我可不是偷懒,只是想学术借鉴一下)因为最近有在做左右滑动功能,

    2024年02月07日
    浏览(55)
  • uni-app多选select组件,兼容多平台小程序、H5

          目录 介绍 平台差异说明 使用方式 安装 引入 基本使用 默认选中项(回显) 配置label、value对应的key名称 获取点击确认后的结果 完整示例 API Props Option Attributes Slot Events 多选select组件目前只支持多选,单选请用单选select组件 支持配置段 兼容多平台小程序、H5

    2024年02月09日
    浏览(34)
  • 【uni-app】自定义导航栏

    新手刚玩 uniapp 进行微信小程序,甚至多端的开发。 原生uniapp 的导航栏,并不能满足 ui 的需求,所以各种查阅资料,导航栏自定义内容 整理如下: 需要修改的文件如下: 1、pages.json 修改pages.json,启动导航栏自适应,设置\\\" navigationStyle\\\": \\\"custom\\\" 2、system_info.js 新建 system_info

    2024年02月16日
    浏览(35)
  • uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

    网上的组件和教程代码都太乱了,根本无法按照自己的需求修改,而且基本上都有兼容性和功能性 BUG。 本文实现了 多行文本展开与折叠组件,灵活性非常高,只完成了核心功能,可随意自定义样式满足您的需求, 您只需要一键复制组件源码,按照详细的代码示例,几分钟快

    2024年02月07日
    浏览(44)
  • uni-app - 文字上下循环滚动翻滚,类似中奖名单与公告栏信息公示等等,自定义组件封装,支持 DIY(适用于新闻动态、公告上下滚动列表、上下循环滚动,无限上下自动滚动列表)兼容小程序/H5/App

    uni-app是一款使用Vue.js开发所有前端应用的框架,让开发者能够使用Vue.js开发多端应用,具有开发效率高、易学易用、性能优秀、插件丰富、跨平台等优点。今天,我们将介绍如何使用uni-app实现文字上下循环滚动,类似于中奖名单或公告栏信息公示等效果。

    2024年02月12日
    浏览(46)
  • uni-app uView自定义底部导航栏

    因项目需要自定义底部导航栏,我把它写在了组件里,基于uView2框架写的(vue2);   在components下创建tabbar.vue文件,代码如下:  app.vue (有没有大佬知道为什么这个样式加载app.vue里才生效)  pages.json配置 页面使用: ( mine.vue ) 注: current是底部导航栏的下标,你在tabb

    2024年02月14日
    浏览(60)
  • 不同平台使用不同技术实现微信好友、朋友圈分享汇总(H5、taro、uni-app)

    人生路漫漫,坑,是活久了见。程序猿世界里各种奇葩的需求都有,随之而来的各种坑也是层出不穷。 应前IBM同事邀请特来做分享的专题总结。一般人我不告诉他,刷到的朋友们就赚到了,你懂的~~~~~~收藏吧!   事情前情概述,昨天IBM的同事前来咨询我怎样实现微信分享功

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包