187 lines
4.0 KiB
Vue
187 lines
4.0 KiB
Vue
<template>
|
||
<view>
|
||
<view class="nav">
|
||
<block v-for="(item,index) in tabbar">
|
||
<view class="nav-item" v-if="!item.midButton" :key="index" @click="jumpTo(item, index)">
|
||
<image
|
||
:src="current === index ? item.selectedIconPath :item.iconPath"
|
||
class="icon" mode="" :class="current === index ? 'bounceIn':''">
|
||
</image>
|
||
<text class="name" :style="{ color: current === index ? item.activeColor : item.inactiveColor}">{{item.name}}</text>
|
||
<!-- <text class="name" :class="{active: current === index}">{{item.name}}</text> -->
|
||
</view>
|
||
<view class="nav-item" @click="jumpTo(item, index)" v-if="false">
|
||
<image :src="item.iconPath" class="midButton" mode=""></image>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
<view class="nav-height"></view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
let userInfo = uni.getStorageSync('userInfo');
|
||
export default {
|
||
name:"tabbar",
|
||
data() {
|
||
return {
|
||
current: 0,
|
||
tabPages: [
|
||
{
|
||
name: '首页',
|
||
url: '/pages/home/index',
|
||
iconPath: '/static/tabber/home.png',
|
||
selectedIconPath: '/static/tabber/home-use.png',
|
||
activeColor: '#22bd5e',
|
||
inactiveColor: '#333333'
|
||
},
|
||
{
|
||
name: '我的',
|
||
url: '/pages/user/index',
|
||
iconPath: '/static/tabber/my.png',
|
||
selectedIconPath: '/static/tabber/my-use.png',
|
||
activeColor: '#22bd5e',
|
||
inactiveColor: '#333333'
|
||
}
|
||
]
|
||
};
|
||
},
|
||
mounted(){
|
||
let routes = getCurrentPages();
|
||
let curRoute = routes[routes.length - 1].route
|
||
this.tabbar.map((item, index) => {
|
||
if (item.url.indexOf(curRoute) > -1) {
|
||
this.current = index;
|
||
}
|
||
})
|
||
},
|
||
methods: {
|
||
jumpTo(row, index) {
|
||
return
|
||
if (this.current === index) return;
|
||
// 点击中间按钮的时候不改变current,因为进入视频后返回应该是停留在进入前的页面
|
||
if (index !== 2) {
|
||
this.current = index;
|
||
}
|
||
if (row.midButton) {
|
||
uni.navigateTo({
|
||
url: row.url
|
||
})
|
||
} else {
|
||
console.log(row)
|
||
uni.reLaunch({
|
||
url: row.url
|
||
})
|
||
}
|
||
}
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
@-webkit-keyframes bounceIn {
|
||
0% {
|
||
opacity: 0;
|
||
-webkit-transform: scale(.3);
|
||
transform: scale(.3)
|
||
}
|
||
|
||
50% {
|
||
opacity: 1;
|
||
-webkit-transform: scale(1.05);
|
||
transform: scale(1.05)
|
||
}
|
||
|
||
70% {
|
||
-webkit-transform: scale(.9);
|
||
transform: scale(.9)
|
||
}
|
||
|
||
100% {
|
||
opacity: 1;
|
||
-webkit-transform: scale(1);
|
||
transform: scale(1)
|
||
}
|
||
}
|
||
|
||
@keyframes bounceIn {
|
||
0% {
|
||
opacity: 0;
|
||
-webkit-transform: scale(.3);
|
||
-ms-transform: scale(.3);
|
||
transform: scale(.3)
|
||
}
|
||
|
||
50% {
|
||
opacity: 1;
|
||
-webkit-transform: scale(1.05);
|
||
-ms-transform: scale(1.05);
|
||
transform: scale(1.05)
|
||
}
|
||
|
||
70% {
|
||
-webkit-transform: scale(.9);
|
||
-ms-transform: scale(.9);
|
||
transform: scale(.9)
|
||
}
|
||
|
||
100% {
|
||
opacity: 1;
|
||
-webkit-transform: scale(1);
|
||
-ms-transform: scale(1);
|
||
transform: scale(1)
|
||
}
|
||
}
|
||
|
||
.bounceIn {
|
||
-webkit-animation-name: bounceIn;
|
||
animation-name: bounceIn
|
||
}
|
||
$height: 98rpx;
|
||
.nav-height{
|
||
background-color: #f2f2f2;
|
||
height: $height + 2rpx;
|
||
}
|
||
.nav{
|
||
height: $height;
|
||
display: flex;
|
||
align-items: center;
|
||
// justify-content: space-around;
|
||
position: fixed;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
border-top: 2rpx solid #eee;
|
||
background: white;
|
||
&-item{
|
||
// #ifndef APP-PLUS
|
||
width: 25%;
|
||
// #endif
|
||
// #ifdef APP-PLUS
|
||
width: 50%;
|
||
// #endif
|
||
display: flex;
|
||
flex-direction: column;
|
||
// align-items: center;
|
||
justify-content: center;
|
||
.icon{
|
||
display: block;
|
||
margin-bottom: 6rpx;
|
||
width: 78rpx;
|
||
height: 88rpx;
|
||
}
|
||
.name{
|
||
color: #a0a1a2;
|
||
font-size: 24rpx;
|
||
&.active{
|
||
color: rgb(248, 210, 71);
|
||
}
|
||
}
|
||
}
|
||
.midButton{
|
||
width: 120rpx;
|
||
height: 120rpx;
|
||
margin-top: -40rpx;
|
||
}
|
||
}
|
||
</style> |