uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

这篇具有很好参考价值的文章主要介绍了uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

pages.json

uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

 上面可以看到tabbar我使用的原生的,但是值配置了pagepath,并且page里三个首页都可以自定义顶部导航栏,当然如果删掉custom那一行代码,就切换成原生顶部导航栏了。

下面拿一个首页作为代码演示:(顶部自定义导航栏组件和底部导航栏组件会放在最后)

下图组件没有引入,是使用了easyCom,官网详解

<template>
	<div>
		<tabbarTop :data="tabbarTopData"></tabbarTop>
		<tabbarBottom :current="0"></tabbarBottom>
	</div>
</template>

<script>
	import { mapState } from 'vuex';
	export default {
		data() {
			return {
				tabbarTopData: {
					title: "家园首页"
				}
			}
		},
		components: {},
		computed: {
			...mapState(["hasLogin"])
		},
		onLoad() {},
		onShow() {},
		methods: {

		}
	}
</script>

<style lang="scss" scoped>
</style>

需要在App.vue中onLaunch和onShow方法后面加上uni.hideTabbar({})隐藏原生tabbar(因为兼容性问题两个地方必须都加上)

uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

 特别需要留意的"navigationStyle": "default" 只能控制顶部导航栏是否自定义,而底部导航栏是由下图选项控制,如果要隐藏可以通过   uni.hideTabBar()  隐藏掉,其实就是使用原生的底部导航栏,只不过通过api隐藏掉,然后每个tabbar页面都写上自定义的底部导航栏,

uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

 修改大小
根据需要修改了u-tabbar和u-tabbar-item宽度高度,这些基本属性在uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue和uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue中都有相应的注释,写得很清楚,自行修改就好

修改u-tabbar的高度,我使用的是深度选择器,只不过需要在自定义底部导航栏组件里面开启一个option,我封装的自定义底部导航栏组件代码如下:

<template>
	<div class="tabBox">
		<u-tabbar :placeholder="false" :value="current?current:0" @change="tabbarChange" :safeAreaInsetBottom="true" :border="false">
			<u-tabbar-item text="首页">
				<image class="u-page__item__slot-icon" slot="active-icon" src="@/static/img/橘子.svg">
				</image>
				<image class="u-page__item__slot-icon" slot="inactive-icon" src="@/static/img/布丁.svg">
				</image>
			</u-tabbar-item>
			<u-tabbar-item text="案例">
				<image class="u-page__item__slot-icon" slot="active-icon" src="@/static/img/煎蛋.svg">
				</image>
				<image class="u-page__item__slot-icon" slot="inactive-icon" src="@/static/img/冰淇淋.svg">
				</image>
			</u-tabbar-item>
			<u-tabbar-item text=" ">
				<image class="u-page__item__slot-icon shopTabar" slot="active-icon" src="@/static/img/香蕉.svg">
				</image>
				<image class="u-page__item__slot-icon" slot="inactive-icon" src="@/static/img/胡萝卜.svg">
				</image>
			</u-tabbar-item>
			<u-tabbar-item text="评测">
				<image class="u-page__item__slot-icon" slot="active-icon" src="@/static/img/香蕉.svg">
				</image>
				<image class="u-page__item__slot-icon" slot="inactive-icon" src="@/static/img/胡萝卜.svg">
				</image>
			</u-tabbar-item>
			<u-tabbar-item text="我的">
				<image class="u-page__item__slot-icon" slot="active-icon" src="@/static/img/香蕉.svg">
				</image>
				<image class="u-page__item__slot-icon" slot="inactive-icon" src="@/static/img/胡萝卜.svg">
				</image>
			</u-tabbar-item>
		</u-tabbar>
	</div>
</template>

<script>
	export default {
		options: { styleIsolation: 'shared' },
		data() {
			return {
				list: [
					{ path: "pages/home/index" },
					{ path: "pages/caseStory/index" },
					{ path: "pages/shop/index" },
					{ path: "pages/evaluation/index" },
					{ path: 'pages/user/index' },
				]
			}
		},
		props: {
			current: Number
		},
		components: {},
		onLoad() {

		},
		onShow() {

		},
		methods: {
			tabbarChange(e) {
				console.log(e, '/' + this.list[e].path);
				uni.switchTab({
					url: '/' + this.list[e].path
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.u-page__item__slot-icon {
		width: 54rpx;
		height: 54rpx;
	}

	.tabBox {

		::v-deep .u-tabbar__content__item-wrapper {
			height: 163rpx;
		}

		::v-deep .u-tabbar__content__item-wrapper .u-tabbar-item:nth-child(3) .u-page__item__slot-icon {
			width: 102rpx;
			height: 102rpx;
		}
	}
</style>

至于为什么使用option选项:看这篇文章

如果还需要添加底部导航栏按下出现阴影的css效果:参考

自定义导航栏封装的组件:

<template>
	<div>
		<u-navbar :title="data.title" :safeAreaInsetTop="true" :fixed="true">
			<view class="u-nav-slot" slot="left">
				<u-icon name="home" size="40"></u-icon>
			</view>
		</u-navbar>
	</div>
</template>

<script>
	export default {
		data() {
			return {

			}
		},
		props: {
			data: Object
		},
		components: {},
		onMounted() {

		},
		onShow() {

		},
		methods: {

		}
	}
</script>

<style lang="scss" scoped>
	::v-deep.u-navbar__content__left {
		.uicon-home {
			font-size: 80rpx !important;
		}
	}
</style>

后续产品让把tabbar设置成五个,中间的一个设置为圆的并且突出显示,如下图:

uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

只需要在上面封装的tabbar代码里面用深度选择器改一下第三个item:

 uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!

还有一种方案 切换tabbar的时候并未跳转页面,而是把tabbar页面分别封装成了组件 在切换组件。(豌豆拼车小程序 貌似就是这种) 文章来源地址https://www.toymoban.com/news/detail-408963.html

到了这里,关于uni-app 使用 Uview2.x 搭建自定义tabbar组件,自定义navbar,还会解决自定义导航栏引起闪烁性能差的问题!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uni-app uView自定义底部导航栏

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

    2024年02月14日
    浏览(59)
  • uni-app自定义tabbar(van-tabbar)

    main.vue custom-tabbar 全部菜单放在一个界面使用v-if显示隐藏的做法是因为单独页面的话第一次切换下标菜单栏会闪烁(但是使用v-if又要自定义导航栏,就…挺离谱的), 如果不使用这种v-if显示的话(单独页面)可以在每个菜单界面加上以下代码(会闪烁),如果大家有更好的

    2024年02月20日
    浏览(28)
  • uni-app 微信小程序之自定义中间圆形tabbar

    首先在 pages.json 文件中,新建一个 tabbar 页面 此页面主要是写 tabbar的html样式和布局,引用主页面代码,通过 v-if 控制进行展示 index , search , maim , news , me 一级页面 css 样式文件太多了就不贴出来了

    2024年02月03日
    浏览(37)
  • uView 在 uni-app 中的使用

    提示:正文内容: uView 官网: https://www.uviewui.com uView 是 uni-app 生态专用的 UI 框架 关于uView的取名来由,首字母u来自于uni-app首字母,uni-app是基于Vue.js,Vue和View(延伸为UI、视图之意)同音,同时view组件是uni-app中 最基础,最重要的组件,故取名uView,表达源于uni-app和Vue之意,

    2024年02月15日
    浏览(33)
  • 使用uni-app+uview创建小程序工程并支持请求后端接口

    一、使用工具:     1.hubilderx   下载地址:HBuilderX-高效极客技巧     2.微信开发者工具   下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档     3.uview组件库API:Color 色彩 | uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架 二、使用hubuilderx创建uni-app项目

    2024年02月11日
    浏览(43)
  • 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~ uniapp官网提供了  HBuild

    2024年02月09日
    浏览(46)
  • 使用vue2开发uni-app项目--引入uview-ui

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、安装 1、安装uview-ui 2、安装scss支持 二、配置 1、在main.js中引入uView库 2、uni.scss文件中引入uView的全局SCSS主题文件  3、在APP.vue文件中引入uView基础样式 4、在pages.json中 配置easycom组件模式

    2024年02月04日
    浏览(45)
  • 【Uni-App】uniapp使用uview实现弹出键盘输入密码/验证码功能

    组件使用的是uview组件,Keyboard 键盘和MessageInput 验证码输入两个组件配合使用。 通过mode参数定义键盘的类型,v-model绑定一个值为布尔值的变量,我绑定的是showKeyboard变量,控制键盘的弹出与收起; mode = number (默认值)为数字键盘,此时顶部工具条中间的提示文字为\\\"数字键盘

    2023年04月16日
    浏览(38)
  • (小程序)基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    版本信息: 点击编辑器的文件 新建 项目(快捷键Ctrl+N) 2.选择uni-app项目,输入项目名/路径,选择项目模板,勾选vue3版本,点击创建,即可成功创建。 3.点击编辑器的运行 运行到浏览器 选择浏览器 当然也可以运行到手机或模拟器、运行到小程序工具。 到这里一个简单的

    2024年02月16日
    浏览(48)
  • uni-app使用uView打开弹出层后输入框聚焦时placeholder错位问题

    这里就不放效果了,大概意思就是在使用uView的popus时,在底部弹出后,如果弹窗中的输入框会造成一瞬间的placeholder文字错位,这个问题的主要是因为uView安全区适配导致 uView相关文档 popus源码 它会自动判断在并且在IPhone X等机型的时候,给元素加上一个适当底部内边距,从

    2024年02月19日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包