mobile footer nav

在这里插入图片描述
item 数量可变,图片可变,高亮颜色可变

tabbar.vue

<template>
	<div class="tab-bar">
		<slot></slot>
	</div>
</template>
<script>
export default {
	name: "TabBar",
}

</script>
<style scoped>
.tab-bar {
	display: flex;
	/*让它一直处于底部 左右占满*/
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: #f6f6f6;
	
    /*让它上面有一条过渡的线*/
	box-shadow: 0 -1px 1px rgba(100,100,100,.1);
}

</style>

TabBarItem.vue

<template>
	<div class="tab-bar-item" @click="goPage(link)">
		<div v-if="!isActive">
			<slot name="item-icon"></slot>
		</div>
		<div v-else>
			<slot name="item-icon-active"></slot>
		</div>
		<div :style="activeStyle">
			<slot name="item-text"></slot>
		</div>
	</div>
</template>
<script>
export default {
	name: "TabBarItem",
	props: {
		link: String,
		activeColor: {
			type: String,
			default: "red"
		}
	},
	computed: {
		isActive() { return this.$route.path.indexOf(this.link) !== -1; },
		activeStyle(){
			return this.isActive ? {color:this.activeColor}:{}
		}
	},
	methods: {
		goPage(link) {
			this.$router.push(this.link);
		},
	},
}

</script>
<style scoped>
.tab-bar-item {
	flex: 1;
	/*让每个项目都占相同的比例*/
	text-align: center;

	/*mobile 底部导航的通用高度就是49px*/
	height: 49px;

	cursor: pointer;
}

.tab-bar-item p {
	margin: 0;
}

.icon {
	width: 24px;
	height: 24px;
	vertical-align: middle;
	/*用来消除 image 周围的空隙 3px*/
  margin-top:3px;
  margin-bottom:2px;
}

</style>

TabBarMain.vue

<template>
	<div>
		<TabBar>
			<TabBarItem v-for="item in tabBarData" :key="item" :link="item.link" :activeColor="item.avtiveColor">
				<template v-slot:item-icon>
					<img :src="item.icon" class="icon" alt="">
				</template>
				<template v-slot:item-icon-active>
					<img :src="item.activeIcon" class="icon" alt="">
				</template>
				<template v-slot:item-text>
					<p>{{item.name}}</p>
				</template>
			</TabBarItem>
		</TabBar>
	</div>
</template>
<script>
import TabBar from '@/components/tabbar/TabBar'
import TabBarItem from '@/components/tabbar/TabBarItem'
export default {
	name: "App",
	data() {
		return {
			tabBarData: [{
					icon: "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2457145072,1625315765&fm=26&gp=0.jpg",
					activeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fd.lanrentuku.com%2Fdown%2Fpng%2F0904%2FM-v-Player%2FM-v-Player_13.png&refer=http%3A%2F%2Fd.lanrentuku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=ced8bd1a6566e7951faee1761fee5302",
					name: "首页",
					link: "/home",
					avtiveColor: "blue"
				},
				{
					icon: require("@/assets/img/tabbar/cart.png"),
					activeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F01%2F41%2F51%2F35573d4377e4c5b.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=30b5b6a9a4d90fa011b8208b3a90db1d",
					name: "购物车",
					link: "/cart",
					avtiveColor: "blue"
				},
				{
					icon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F00%2F15%2F98%2F4056aecc947d04c.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=b5c7a47c17e191ee6ed3628d7ec28b36",
					activeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F01%2F80%2F60%2F85574d8c3548d1a.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=a55663e6b32dbc49c81975d1e856fab8",
					name: "分类",
					link: "/category",
					avtiveColor: "blue"
				},
				{
					icon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F01%2F39%2F30%2F82573cb6758ba32.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=0a1802371479031d23e65eafa98cb19a",
					activeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimage.biaobaiju.com%2Fuploads%2F20190703%2F16%2F1562142576-LyutQDBNRh.jpg&refer=http%3A%2F%2Fimage.biaobaiju.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617591426&t=4479fa3539bbddf0590805251e4bccb3",
					name: "我的",
					link: "/profile",
					avtiveColor: "blue"
				},
			]
		}
	},
	components: { TabBar, TabBarItem },
}

</script>

App.vue

<template>
	<div id="app">
		<router-view />
		<tab-bar-main />
	</div>
</template>
<script>
import TabBarMain from '@/components/tabbar/TabBarMain'
export default {
	name: "App",
	components: { TabBarMain },
}

</script>
<style>
@import "./assets/css/base.css"
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值