uniapp+uView2.0实现自定义动态tabbar

这篇具有很好参考价值的文章主要介绍了uniapp+uView2.0实现自定义动态tabbar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     1.需求说明
     2.实现原理说明
     3.实现过程
         3.1集成uView2.0
         3.2 自定义tabbar
         3.3 vuex定义tabbar共享信息
         3.4 tabbar显示个数控制

1.需求说明

     要求不同时间显示不同的tabbar.点击不同的tabbar跳转到不同的页面,能随时实现tabbar显示个数的切换。一种是只需要显示首页、我的页面;另一种是显示首页、消息、我的页面。效果图如下:uniapp+uView2.0实现自定义动态tabbar
uniapp+uView2.0实现自定义动态tabbar

2.实现原理说明

     基于uview2.0的u-tabbar实现自定义tabbar,使用vuex实现tabbar显示状态数据共享。首页和我的页面初始化时调用后端接口获取当前tabbar状态,根据不同的状态控制页面显示两个还是显示三个tabbar.

3.实现过程

3.1集成uView2.0

     Hbuilder导入插件,uniapp插件市场搜索:uView2.0
uni.scss中添加如下:

// 导入uView全局scss变量文件
@import "./uni_modules/uview-ui/theme.scss";

main.js中添加如下:

// 引入全局uView
import uView from './uni_modules/uview-ui'
Vue.use(uView)
3.2.自定义tabbar

    自定义组件:custom-tabbar

<template>
	<view >
	<u-tabbar
		:value="tabbarIndex"
		:fixed="true"
		:safeAreaInsetBottom="true"
		:placeholder="true"
	>
		
		<u-tabbar-item  v-for="(tabbarItem,index) in tabbar" :key="index" :text="tabbarItem.text" @click="switchTo()">
				<image
					class="image_class"
					slot="active-icon"
					:src="tabbarItem.selectedIconPath"
				></image>
				<image
					class="image_class"
					slot="inactive-icon"
					:src="tabbarItem.iconPath"
				></image>
			</u-tabbar-item>
	</u-tabbar>
	</view>
</template>

<script>
	import {
			mapState
		} from 'vuex';
	export default {
		name:"custom-tabbar",
		data() {
			return {
				tabbar:[]  // tabbar信息
			};
		},
		computed: mapState({
					tabbarIndex:'tabbarIndex',
					tabbarList:'tabbarList'
				}),
	     // 自定义组件中属性
	    props:['tabbarState'],
		created() {
					// 模拟调用服务端接口,显示首页和我的页面
					if(this.tabbarState == 1){
						const storeTabbar=this.$store.state.tabbarList;
						this.tabbar = this.tabbar.concat(storeTabbar[0]).concat(storeTabbar[2]);
					}
					// 模拟调用服务端接口,显示首页、消息和我的页面
					if(this.tabbarState == 2){
						this.tabbar = this.$store.state.tabbarList;
					}
					
		},
		methods:{
			// 页面跳转
			switchTo(event){
				wx.switchTab({
					url: this.tabbar[event].pagePath,
					success: () => {
						this.$store.state.tabbarIndex = event
					}
				})
				
		}
	},
	}
</script>

<style lang="scss">
.image_class{
	width: 50rpx;
	height: 50rpx;
}	
</style>
3.3.vuex定义tabbar共享信息

    项目根目录下创建storage文件夹,然后创建index.js.内容如下:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
	// 这个代表全局可以访问数据对象,就像是咱们在组件中声明的 data 属性,区别在于data中数据为组件私有,这里state为项目全局共享。
	state: {
		// 自定义tabbar索引
		tabbarIndex:  0,
		// tabbar信息
		tabbarList:[{
							iconPath: "/static/index.png",
							selectedIconPath: "/static/index_select.png",
							text: '首页',
							count: 2,
							isDot: true,
							pagePath: "/pages/index/index"
						},
						{
							iconPath: "/static/message.png",
							selectedIconPath: "/static/message_select.png",
							text: '消息',
							midButton: true,
							pagePath: "/pages/news/news"
						},
						{
							iconPath: "/static/mine.png",
							selectedIconPath: "/static/mine_select.png",
							text: '我的',
							pagePath: "/pages/mine/mine"
						},
					]			
		
	},
	// 这个实时监听 state 内的数据对象变化,类似 咱们组件中的 computed 属性,会依赖 state 数据变化而变化
	getters: {
	
	},
	// 用来同步设置 state 的值
	mutations: {
		
	},
	// 通过提交 mutations 内部的方法,异步更新 state 的状态,官方推荐都使用这种方法比较合适
	actions: {
	
	}
})
export default store

main.js中引入storage信息

// 引入 store 
import store from '@/store/index.js'
Vue.prototype.$store = store

const app = new Vue({
    ...App,
	store
})

    page.json中设置tabbar路径,否则调用wx.switchTab方法不生效(仅针对于tabbar页面实现跳转)

"tabBar": {
	  "custom": true,
	  "list": [{
	      "pagePath": "pages/index/index"
	    },
	    {
	      "pagePath": "pages/news/news"
	    },
		{
		  "pagePath": "pages/mine/mine"
		}
	  ]
	}

3.4 tabbar显示个数控制

    以下代码中通过手动修改tabbarState模拟调用服务端接口查询状态.首页与我的页面需要动态获取,消息页面固定显示三个tabbar设置即可.

    我的页面:

<template>
	<view>
		<view>我的页面</view>
		<view>
			<!-- 自定义tabbar -->
			<custom-tabbar :tabbarState='tabbarState'></custom-tabbar>
		</view>
	</view>
	
</template>

<script>
	export default {
		data() {
			return {
				tabbarState: 3 //tabbar显示个数 1.显示2个;2.显示3个
			};
		},
		created() {
			// 控制tabbar显示个数 1.显示2个;2.显示3个
			this.tabbarState=1;
			console.log("首页状态:"+this.tabbarState)
		}
	}
</script>

<style lang="scss">
	

</style>

    首页:

<template>
	<view class="content">
		<image class="user_img" :src="userImg"></image>
		<view class="nick_class">
			<text class="title">昵称:</text>
			<input type="nickname" class="weui-input" placeholder="请输入昵称"/>
		</view>
		<view>
			<!-- 自定义tabbar -->
			<custom-tabbar :tabbarState='tabbarState'></custom-tabbar>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				userImg:"../../static/logo.png",
				tabbarState: 3 //tabbar显示个数 1.显示2个;2.显示3个
			}
		},
		created() {
			// 控制tabbar显示个数 1.显示2个;2.显示3个
			this.tabbarState=1;
			console.log("首页状态:"+this.tabbarState)
		},
		methods: {
			
			}
			
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		
	}

	.user_img {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
	.nick_class{
		display: flex;
		flex-direction: row;
	}
</style>

    消息页面:

<template>
	<view>
		<view>消息页面</view>
		<view>
			<!-- 自定义tabbar -->
			<custom-tabbar tabbarState=2></custom-tabbar>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				value1: 0
			};
		},
		methods:{
		}
		
		
	}
</script>

<style lang="scss">

</style>

补充:
可以直接在自定义tabbar中请求渲染之前设置tabbar信息:

beforeCreate() {
		// 调用接口
		findTabbarSetting({}).then((res)=>{
			if(res.Flag){
				this.tabbar = this.$store.state.tabbarList;
				console.log("显示三个"+JSON.stringify(this.tabbar))
			}else{
				const storeTabbar=this.$store.state.tabbarList;
				this.tabbar = this.tabbar.concat(storeTabbar[0]).concat(storeTabbar[2]);
				console.log("显示两个"+JSON.stringify(this.tabbar))
			}
		})
	}

各页面引用tabbar时则不需要传参,可以直接引用,实例:

<template>
	<view>
		<view>消息页面</view>
		<view>
			<custom-tabbar></custom-tabbar>
		</view>
	</view>
</template>

    以上是实现tabbar动态显示的实现过程,如果感觉有帮助欢迎评论区点赞或留言!文章来源地址https://www.toymoban.com/news/detail-417262.html

到了这里,关于uniapp+uView2.0实现自定义动态tabbar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp 微信小程序使用uview u-tabbar组件自定义tabbar

    1.在components文件下面新建TabBar.vue组件, 使用uview的u-tabbar组件进行二次封装; u-tabbar组件中value取当前匹配项的name, 一般从父组件传过来即可; 在u-tabbar-item标签内可以使用插槽 slot=\\\'inactive-icon\\\'(选中的图标)和slot=\\\'inactive-icon\\\'(未选中的图标)自定义图片样式 u-tabbar组件默认已经为i

    2024年02月13日
    浏览(74)
  • uview2.0 【uniapp】购物车样式

    2024年01月18日
    浏览(48)
  • 【RuoYi移动端】uniApp导入和引用uView2.0插件

    安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 uView UI,是 uni-app 生态最优秀的 UI 框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 https://uviewui.com/components/install.html  也可直接点击以下下载地址: uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市

    2024年02月11日
    浏览(54)
  • uniapp自定义动态tabbar及全局挂载底部自定义组件

    本篇文章解决的问题如下: 1:uniapp在pages.json中定义的tabbar,在非tabbar页面的时候不会显示,所以自定义了一个tabbar组件。(注意是自定义组件不是官方的custom-tab-bar组件) 2:有些tabbar需要动态变化,会员登陆前和会员登陆后可能会需要在tabbar上面展示不同的项目,所以要做

    2024年02月02日
    浏览(65)
  • uni-app使用uview-ui实现动态更改底部tabbar

    需求:根据不同的权限(用户 0, 物业 1)展示不同的tabbar 这里使用的是uview-ui@1.8.4 tabbar 在utils文件夹下新建一个tabbar.js文件,来存储不同权限下的底部导航数据 在page.json文件里,把tabbar里的几个页面去重放进去tabBar。 使用vuex 新建store 文件夹存储相关数据 在入口文件 mai

    2024年02月12日
    浏览(56)
  • uniapp自定义tabbar(支持中间凸起,角标,动态隐藏tab,全端适用)

    在使用uniapp进行开发时,tabbar是我们使用的很频繁的一个组件,但是在特定的平台会有一些使用上的限制,无法通过一套代码来做通用平台的适配。比如说中间按钮凸起,动态隐藏某个tab(不同角色展示不同功能),使用字体图标,数字角标等,这些功能不是所有平台都支持

    2024年02月02日
    浏览(42)
  • uniApp开发小程序自定义tabBar底部导航栏+tabBar中间凸起自定义样式实现

            先看效果是否可以满足你们,如果可以满足你只要一步一步照着做绝对没有错。         本人技术不佳,研究了一整天,全网的大佬们写的博客看的晕头转向,避免大伙再走弯路,跟着我以下步骤一点一点来绝对可以实现。         最终效果图: (如果你

    2024年02月04日
    浏览(52)
  • uniapp+uView 实现自定义水印相机,拍完照片给图片加水印,从相册选择图片加水印功能

    样式图如上所示 页面分为取景框和拍照完成后预览,本功能设计到,公共上传组件,相机也页面,获取定位地址,页面中如何用该上传组件 UI实现 取景界面分为上下两个部分,上部分为camera取景框组件,下部分为操作区域。 取景框组件上的关闭和水印,以及拍完照片后的略

    2024年04月14日
    浏览(126)
  • uniapp使用vue3和ts开发小程序自定义tab栏,实现自定义凸出tabbar效果

    要实现自定义的tabbar效果,可以使用自定义tab覆盖主tab来实现,当程序启动或者从后台显示在前台时隐藏自带的tab来实现。自定义一个tab组件,然后在里面实现自定义的逻辑。 组件中所使用的组件api可以看:Tabbar 底部导航栏 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-

    2024年02月04日
    浏览(44)
  • 在微信小程序中或UniApp中自定义tabbar实现毛玻璃高斯模糊效果

    backdrop-filter: blur(10px); 这一行代码表示将背景进行模糊处理,模糊程度为10像素。这会导致背景内容在这个元素后面呈现模糊效果。 background-color: rgb(255 255 255 / .32); 这一行代码表示设置元素的背景颜色为白色(RGB值为0, 0, 0),并且通过/符号后面的透明度值(32%不透明度)使背

    2024年04月09日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包