uni app 实现中间凸起的 tabbar

先看效果
在这里插入图片描述
首先在pages.json文件中进行tabbar的样式和列表配置,代码如下:

"tabBar": {
   		"custom": true, //开启自定义tabBar  不填每次原来的tabbar在重新加载时都回闪现
		"color": "#B6C3D2",
		"selectedColor": "#2B2E3D",
		"borderStyle": "black",
		"backgroundColor": "#FFFFFF",
		"list": [{
				"pagePath": "pages/index/index",
				"iconPath": "static/img/TabBar/tabbar/msg.png",
				"selectedIconPath": "static/img/TabBar/active/meg_active.png",
				"text": "消息"
			},
			{
				"pagePath": "pages/todo/todo",
				"iconPath": "static/img/TabBar/tabbar/todo.png",
				"selectedIconPath": "static/img/TabBar/active/todo_active.png",
				"text": "待办"
			},
			{
				"text": "工作台",
				"pagePath": "pages/workBench/workBench",
				"iconPath": "static/img/TabBar/active/workBench.png",
				"selectedIconPath": "static/img/TabBar/active/workBench.png"
			},

			{
				"pagePath": "pages/contacts/contacts",
				"iconPath": "static/img/TabBar/tabbar/contacts.png",
				"selectedIconPath": "static/img/TabBar/active/contacts-active.png",
				"text": "通讯录"
			},
			{
				"pagePath": "pages/mine/mine",
				"iconPath": "static/img/TabBar/tabbar/my.png",
				"selectedIconPath": "static/img/TabBar/active/my_active.png",
				"text": "我的"
			}
		]

	}

在components封装一个Tabbar 组件

<template>  
    <view class="tabbar-container">  
        <block>  
            <view class="tabbar-item" v-for="(item,index) in tabbarList" :class="[item.centerItem ? ' center-item' : '']" @click="changeItem(item)">  
                <view class="item-top">  
                    <image :src="currentItem==item.id?item.selectIcon:item.icon"></image>  
                </view>  
                <view class="item-bottom" :class="[currentItem==item.id ? 'item-active' : '']">  
                    <text>{{item.text}}</text>  
                </view>  
            </view>  
        </block>  

    </view>  
</template>  

<script>  
    export default {  
        props:{  
            currentPage: {  
                type: Number,  
                default: 0  
            }  
        },  
        data() {  
            return {  
                currentItem: 0,  
                tabbarList: [  
                    {  
                        id: 0,  
                        path: "/pages/index/index",  
                        icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDIuODU0IiBoZWlnaHQ9IjEwMi45MzUiIHZpZXdCb3g9IjAgMCAxMDIuODU0IDEwMi45MzUiPjxwYXRoIGQ9Ik04OC41NDcgODcuMDY3YTUwLjk0MSA1MC45NDEgMCAwIDAgMTQuMzA2LTM1LjYgNTEuNDI2IDUxLjQyNiAwIDEgMC01MS4zODUgNTEuNDY3aDM3LjQ5MWE0LjcgNC43IDAgMCAwIDMuNjE4LTcuNzI4ek00MC4zNjggNTAuMjM0YzAgMy4yODktMS45NzMgNS4xOC01LjE4IDUuMThzLTUuMTgtMS44OTEtNS4xOC01LjE4di02Ljk4OGMwLTMuMjA2IDEuODkxLTUuMTggNS4xOC01LjE4czUuMTggMS44OTEgNS4xOCA1LjE4em0zMS41NzEgMGMwIDMuMjg5LTEuODkxIDUuMTgtNS4xOCA1LjE4LTMuMjA2IDAtNS4xOC0xLjg5MS01LjE4LTUuMTh2LTYuOTg4YzAtMy4yMDYgMS44OTEtNS4xOCA1LjE4LTUuMThzNS4xOCAxLjg5MSA1LjE4IDUuMTh6bTkuNyA0NS4xMzdjLjA4Mi0uMDgyLjA4Mi0uMTY0LjE2NC0uMzI5IDAgLjA4Mi4wODIuMTY0LjA4Mi4zMjloLS4yNDd6IiBmaWxsPSIjYWNhY2FjIi8+PC9zdmc+",  
                        selectIcon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDIuODU0IiBoZWlnaHQ9IjEwMi45MzUiIHZpZXdCb3g9IjAgMCAxMDIuODU0IDEwMi45MzUiPjxwYXRoIGRhdGEtbmFtZT0iaWNvbi3mtojmga8g77yI6YCJ5Lit77yJIiBkPSJNODguNTQ3IDg3LjA2N2E1MC45NDEgNTAuOTQxIDAgMCAwIDE0LjMwNi0zNS42IDUxLjQyNiA1MS40MjYgMCAxIDAtNTEuMzg1IDUxLjQ2N2gzNy40OTFhNC43IDQuNyAwIDAgMCAzLjYxOC03LjcyOHpNNDAuMzY4IDUwLjIzNGMwIDMuMjg5LTEuOTczIDUuMTgtNS4xOCA1LjE4cy01LjE4LTEuODkxLTUuMTgtNS4xOHYtNi45ODhjMC0zLjIwNiAxLjg5MS01LjE4IDUuMTgtNS4xOHM1LjE4IDEuODkxIDUuMTggNS4xOHptMzEuNTcxIDBjMCAzLjI4OS0xLjg5MSA1LjE4LTUuMTggNS4xOC0zLjIwNiAwLTUuMTgtMS44OTEtNS4xOC01LjE4di02Ljk4OGMwLTMuMjA2IDEuODkxLTUuMTggNS4xOC01LjE4czUuMTggMS44OTEgNS4xOCA1LjE4em05LjcgNDUuMTM3Yy4wODItLjA4Mi4wODItLjE2NC4xNjQtLjMyOSAwIC4wODIuMDgyLjE2NC4wODIuMzI5aC0uMjQ3eiIgZmlsbD0iIzE3NWNmZiIvPjwvc3ZnPg==",  
                        text: "消息",  
                        centerItem: false  
                    },{  
                        id: 1,  
                        path: "/pages/todo/todo",  
                        icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDQuMzI1IiBoZWlnaHQ9IjEwMS45MDEiIHZpZXdCb3g9IjAgMCAxMDQuMzI1IDEwMS45MDEiPjxwYXRoIGRhdGEtbmFtZT0i6Lev5b6EIDE1IiBkPSJNODAuNjcgMGExMy4yNjcgMTMuMjY3IDAgMCAxIDEzLjI2NyAxMy4wNDZWNDAuODY1bC0uMjgxIDguNjIyYTMwLjI4NyAzMC4yODcgMCAxIDAtMzEuMTQ1IDUxLjk0OWwtMTQuMjc1LS4wOTVIMTMuMjY4QTEzLjI2NyAxMy4yNjcgMCAwIDEgMCA4OC4zVjEzLjI2NUExMy4yNjcgMTMuMjY3IDAgMCAxIDEzLjA0OSAwaC4yMTl6TTMzLjQzNyA2Ny42NTJIMTguMzA5YTMuNDUgMy40NSAwIDAgMCAwIDYuOWgxNS4xMjhhMy40NSAzLjQ1IDAgMCAwIDAtNi45em0xMC4wODQtMjQuOTM4SDE4LjMwOWEzLjQ1IDMuNDUgMCAwIDAgMCA2LjlINDMuNTJhMy40NSAzLjQ1IDAgMSAwIDAtNi45em0yNC41LTI0LjkzOEgxOC4yMjlhMy40NSAzLjQ1IDAgMCAwIC4wODEgNi45SDY4LjFhMy40NSAzLjQ1IDAgMCAwLS4wODEtNi45eiIgZmlsbD0iI2FjYWNhYyIvPjxwYXRoIGRhdGEtbmFtZT0i6Lev5b6EIDE2IiBkPSJNNzcuODk4IDQ5LjA0N0EyNi40MjggMjYuNDI4IDAgMSAxIDUxLjQ3IDc1LjQ3NGEyNi40MjggMjYuNDI4IDAgMCAxIDI2LjQyOC0yNi40Mjd6bTIuNzg5IDExLjk1MmEyLjY1NyAyLjY1NyAwIDAgMC0yLjY1NiAyLjY1N3YxMi42NTZsLTcuNjA1IDktLjA1LjA2MWEyLjY1NiAyLjY1NiAwIDAgMCA0LjEwNyAzLjM2N2w3Ljk0LTkuNGEyLjY0OCAyLjY0OCAwIDAgMCAuOTIxLTIuMDExVjYzLjU4MWEyLjY1NiAyLjY1NiAwIDAgMC0yLjY1OC0yLjU4MnoiIGZpbGw9IiNhY2FjYWMiLz48L3N2Zz4=",  
                        selectIcon: "data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9Imljb24t5b6F5Yqe77yI6YCJ5Lit77yJIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDQuMzI1IiBoZWlnaHQ9IjEwMS45MDEiIHZpZXdCb3g9IjAgMCAxMDQuMzI1IDEwMS45MDEiPjxwYXRoIGRhdGEtbmFtZT0i6Lev5b6EIDE1IiBkPSJNODAuNjcgMGExMy4yNjcgMTMuMjY3IDAgMCAxIDEzLjI2NyAxMy4wNDZWNDAuODY1bC0uMjgxIDguNjIyYTMwLjI4NyAzMC4yODcgMCAxIDAtMzEuMTQ1IDUxLjk0OWwtMTQuMjc1LS4wOTVIMTMuMjY4QTEzLjI2NyAxMy4yNjcgMCAwIDEgMCA4OC4zVjEzLjI2NUExMy4yNjcgMTMuMjY3IDAgMCAxIDEzLjA0OSAwaC4yMTl6TTMzLjQzNyA2Ny42NTJIMTguMzA5YTMuNDUgMy40NSAwIDAgMCAwIDYuOWgxNS4xMjhhMy40NSAzLjQ1IDAgMCAwIDAtNi45em0xMC4wODQtMjQuOTM4SDE4LjMwOWEzLjQ1IDMuNDUgMCAwIDAgMCA2LjlINDMuNTJhMy40NSAzLjQ1IDAgMSAwIDAtNi45em0yNC41LTI0LjkzOEgxOC4yMjlhMy40NSAzLjQ1IDAgMCAwIC4wODEgNi45SDY4LjFhMy40NSAzLjQ1IDAgMCAwLS4wODEtNi45eiIgZmlsbD0iIzE3NWNmZiIvPjxwYXRoIGRhdGEtbmFtZT0i6Lev5b6EIDE2IiBkPSJNNzcuODk4IDQ5LjA0N0EyNi40MjggMjYuNDI4IDAgMSAxIDUxLjQ3IDc1LjQ3NGEyNi40MjggMjYuNDI4IDAgMCAxIDI2LjQyOC0yNi40Mjd6bTIuNzg5IDExLjk1MmEyLjY1NyAyLjY1NyAwIDAgMC0yLjY1NiAyLjY1N3YxMi42NTZsLTcuNjA1IDktLjA1LjA2MWEyLjY1NiAyLjY1NiAwIDAgMCA0LjEwNyAzLjM2N2w3Ljk0LTkuNGEyLjY0OCAyLjY0OCAwIDAgMCAuOTIxLTIuMDExVjYzLjU4MWEyLjY1NiAyLjY1NiAwIDAgMC0yLjY1OC0yLjU4MnoiIGZpbGw9IiMxNzVjZmYiLz48L3N2Zz4=",  
                        text: "待办",  
                        centerItem: false  
                    },{  
                        id: 2,  
                        path: "/pages/workBench/workBench",  
                        icon: "../../static/img/TabBar/active/workBench.png",  
						selectIcon:'../../static/img/TabBar/active/workBench.png',
                        text: "工作台",  
                        centerItem: true  
                    },{  
                        id: 3,  
                        path: "/pages/contacts/contacts",  
                        icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDUuMjU5IiBoZWlnaHQ9IjEwNS4yNTkiIHZpZXdCb3g9IjAgMCAxMDUuMjU5IDEwNS4yNTkiPjxwYXRoIGQ9Ik0xNS4wMzcgMHYxMDUuMjU5SDcuNTE5QTcuMSA3LjEgMCAwIDEgMCA5Ny43NDFWNy41MTlBNy4xIDcuMSAwIDAgMSA3LjUxOSAwaDcuNTE5ek0xOC44IDBoNzguOTQxYTcuMSA3LjEgMCAwIDEgNy41MTkgNy41MTl2OTAuMjIyYTcuMSA3LjEgMCAwIDEtNy41MTkgNy41MTlIMTguOFYwem00MS4zNDggNTIuNjNhMTUuMDM3IDE1LjAzNyAwIDEgMC0xNS4wMzctMTUuMDM4QTE1LjA4MSAxNS4wODEgMCAwIDAgNjAuMTQ4IDUyLjYzek0zOS4xIDc4Ljk0NGM1LjI2MyA2LjAxNSAzNi44NDEgNS4yNjMgNDIuMSAwcy0zLjAwNy0yMi41NTUtMjEuMDUyLTIyLjU1NVMzMy44MzMgNzIuOTI5IDM5LjEgNzguOTQ0eiIgZmlsbD0iI2FjYWNhYyIvPjwvc3ZnPg==",  
                        selectIcon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDUuMjU5IiBoZWlnaHQ9IjEwNS4yNTkiIHZpZXdCb3g9IjAgMCAxMDUuMjU5IDEwNS4yNTkiPjxwYXRoIGQ9Ik0xNS4wMzcgMHYxMDUuMjU5SDcuNTE5QTcuMSA3LjEgMCAwIDEgMCA5Ny43NDFWNy41MTlBNy4xIDcuMSAwIDAgMSA3LjUxOSAwaDcuNTE5ek0xOC44IDBoNzguOTQxYTcuMSA3LjEgMCAwIDEgNy41MTkgNy41MTl2OTAuMjIyYTcuMSA3LjEgMCAwIDEtNy41MTkgNy41MTlIMTguOFYwem00MS4zNDggNTIuNjNhMTUuMDM3IDE1LjAzNyAwIDEgMC0xNS4wMzctMTUuMDM4QTE1LjA4MSAxNS4wODEgMCAwIDAgNjAuMTQ4IDUyLjYzek0zOS4xIDc4Ljk0NGM1LjI2MyA2LjAxNSAzNi44NDEgNS4yNjMgNDIuMSAwcy0zLjAwNy0yMi41NTUtMjEuMDUyLTIyLjU1NVMzMy44MzMgNzIuOTI5IDM5LjEgNzguOTQ0eiIgZmlsbD0iIzE3NWNmZiIvPjwvc3ZnPg==",  
                        text: "通讯录",  
                        centerItem: false  
                    },{  
                        id: 4,  
                        path: "/pages/mine/mine",  
                        icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5Mi44MDciIGhlaWdodD0iMTA0LjQxNCIgdmlld0JveD0iMCAwIDkyLjgwNyAxMDQuNDE0Ij48cGF0aCBkPSJNNDYuNCAwaDI5djI5LjAwNUEyOS4wMDUgMjkuMDA1IDAgMSAxIDQ2LjQgMHpNMjAuMyA2My44MTRoNTIuMjA3YTIwLjMgMjAuMyAwIDAgMSAyMC4zIDIwLjN2Mi45YTE3LjQgMTcuNCAwIDAgMS0xNy40IDE3LjRIMTcuNEExNy40IDE3LjQgMCAwIDEgMCA4Ny4wMTR2LTIuOWEyMC4yODYgMjAuMjg2IDAgMCAxIDIwLjMtMjAuM3oiIGZpbGw9IiNhZWFlYWUiLz48L3N2Zz4=",  
                        selectIcon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5Mi44MDciIGhlaWdodD0iMTA0LjQxNCIgdmlld0JveD0iMCAwIDkyLjgwNyAxMDQuNDE0Ij48cGF0aCBkYXRhLW5hbWU9Imljb24t5oiR55qE77yI6YCJ5Lit77yJIiBkPSJNNDYuNCAwaDI5djI5LjAwNUEyOS4wMDUgMjkuMDA1IDAgMSAxIDQ2LjQgMHpNMjAuMyA2My44MTRoNTIuMjA3YTIwLjMgMjAuMyAwIDAgMSAyMC4zIDIwLjN2Mi45YTE3LjQgMTcuNCAwIDAgMS0xNy40IDE3LjRIMTcuNEExNy40IDE3LjQgMCAwIDEgMCA4Ny4wMTR2LTIuOWEyMC4yODYgMjAuMjg2IDAgMCAxIDIwLjMtMjAuM3oiIGZpbGw9IiMxNzVjZmYiLz48L3N2Zz4=",  
                        text: "我的",  
                        centerItem: false  
                    }  
                ]  

            };  
        },  
        mounted(){  
            this.currentItem = this.currentPage;  
            uni.hideTabBar();  
        },  
        methods: {  
            changeItem(item){  
                let _this = this;  
                //_this.currentItem = item.id;  
                uni.switchTab({  
                    url: item.path  
                });  
				console.log(item.path  )
            }  
        }  
    }  
</script>  
<style>  
        view{  
               padding: 0;  
               margin: 0;  
               box-sizing: border-box;  
        }  
    .tabbar-container{  
        position: fixed;  
        bottom: 0;  
        left: 0;  
        width: 100%;  
        height: 110rpx;  
        /* box-shadow: 0 0 5px #999;  */
		box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.16);
		border-top:1px  ;
        display: flex;  
        align-items: center;  
        padding: 5rpx 0;  
        color: #999999;  
		z-index: 200;
		background-color: #fff;
    }  
    .tabbar-container .tabbar-item{  
        width: 20%;  
        height: 100rpx;  
        display: flex;  
        flex-direction: column;  
        justify-content: center;  
        align-items: center;  
        text-align: center;  
    }  

    .tabbar-container .item-active{  
        color: #175CFF;  
    }  
    .tabbar-container .center-item{  
        display: block;  
        position: relative;  
    }  
    .tabbar-container .tabbar-item .item-top{  
        width: 70rpx;  
        height: 70rpx;  
        padding: 10rpx;  
    }  
    .tabbar-container .center-item .item-top{  
        flex-shrink: 0;  
        width: 100rpx;  
        height: 100rpx;  
        position: absolute;  
        top: -50rpx;  
        left: calc(50% - 50rpx);  
        border-radius: 50%;  
		box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.16);
        /* box-shadow: 0 0 5px #999;  */
        background-color: #ffffff;  
    }  
    .tabbar-container .tabbar-item .item-top image{  
		width: 100%;
		height: 100%;
    }  
		
	tabbar-container .tabbar-item:nth-child(3) .item-top image{
		background:#ff0000;
	}

    .tabbar-container .tabbar-item .item-bottom{  
        font-size: 28rpx;  
        width: 100%;  
    }  
    .tabbar-container .center-item .item-bottom{  
        position: absolute;  
        bottom: 5rpx;  
    }  
</style>  

在mian.js 全局注册

import TabBar from "./components/TabBar/TabBar.vue"
Vue.component('TabBar', TabBar);  

再页面使用

<TabBar :current-page="0" />
uniapp中设置自定义tabbar可以通过修改配置文件来实现。首先,你可以在配置文件中添加一个midButton字段来控制是否显示中间按钮凸起的效果。接下来,你可以配置tabs字段来定义每个tab的图标、文本等属性。你还可以通过配置或者动态修改tab obj中的show属性来动态显示或隐藏某个tab。例如,你可以将第一个tab的show属性设置为false来隐藏它。此外,你还可以使用mark属性来设置角标数量,并决定是否显示角标。在每个导航页的onShow生命周期中使用uni.hideTabBar({animation: false})可以解决切换时出现原生tabBar的问题。这样,就可以实现自定义的tabbar效果了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [uniapp自定义tabbar(支持中间凸起,角标,动态隐藏tab,全端适用)](https://blog.csdn.net/abs625/article/details/129496348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [uniapp小程序自定义tabBar,根据身份切换自定义tabBar](https://blog.csdn.net/weixin_59803648/article/details/127203398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野生葫芦娃_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值