Vue自定义Tabbar

文章描述:

Vue自定义Tabbar以及选中效果

把Tabbar定义为插件,这样能简洁代码和方便操作

插件

1、根目录src/components/common新建Tabbar.vue

template

<template>
	<div class="tabbar">
		<ul>
			<li v-for="(item,index) in routerList"
			:key="index"
			@click='switchTab(item.path)'>
				<img :src="$route.path.includes(item.path) ? item.selected : item.active" />
				<span :class="$route.path.includes(item.path) ? 'active' : '' ">{{item.title}}</span>
			</li>
		</ul>
	</div>
</template>

script

export default{
	data(){
		return{
			routerList:[
				{
					title:'首页',
					path:'/home',
					active:'./images/home.png',
					selected:'./images/home-active.png'
				},
				{
					title:'分类',
					path:'/list',
					active:'./images/cate.png',
					selected:'./images/cate-active.png'
				},
				{
					title:'购物车',
					path:'/cart',
					active:'./images/cart.png',
					selected:'./images/cart-active.png'
				},
				{
					title:'我的',
					path:'/my',
					active:'./images/my.png',
					selected:'./images/my-active.png'
				}
			]
		}
	},
	methods:{
		switchTab(path){
			//console.log(path)
			
			//判断是否点击同一个路由
			if(this.$route.path == path) return;
			
			this.$router.replace(path)
		}
	}
}

style

.tabbar{
	position: fixed;
	left: 0;
	bottom: 0;
	z-index: 999;
	width: 100%;
	height: 2rem;
	background-color: #fff;
}
.tabbar ul{
	display: flex;
	justify-content: space-around;
	width: 100%;
	height: 100%;
	align-items: center;
}
.tabbar ul li{
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
}
.tabbar ul li img{
	width: 0.826666rem;
	height: 0.826666rem;
	display: block;
	margin: 0 auto;
}
.tabbar ul li span{
	font-size: 0.426666rem;
	
}
.tabbar .active{
	color: red;
}

使用

template

<template>
  <div class="home">
	<Tabbar></Tabbar>
  </div>
</template>

script

import Tabbar from '@/components/common/Tabbar.vue'
export default{
	name:"Home",
	components:{
		Tabbar
	}
}

 

发布时间:2022/07/12

发表评论