在vue过渡动效transition的基础上实现主页tab切换
- app.vue 内
<template>
<div id="app">
<div class="tab">
<router-link to="/session" active-class="active">老师</router-link>
<router-link to="/teacher" active-class="active">消息</router-link>
<router-link to="/mine" active-class="active">我的</router-link>
</div>
<transition :name="transitionName">
<router-view></router-view>
</transition>
</div>
</template>
- 监听route对象 并判断路由路径是否与所点击tab栏路径一致
watch:{
'$route'(to,from){
const toPath = to.path
const fromPath = from.path
switch(toPath){
case '/session': sessionStorage.setItem('toPath',0); break;
case '/teacher': sessionStorage.setItem('toPath',1); break;
case '/mine': sessionStorage.setItem('toPath',2); break;
}
switch(fromPath){
case '/session': sessionStorage.setItem('fromPath',0); break;
case '/teacher': sessionStorage.setItem('fromPath',1); break;
case '/mine': sessionStorage.setItem('fromPath',2); break;
}
let toIndex = sessionStorage.getItem('toPath')
let fromIndex = sessionStorage.getItem('fromPath')
this.transitionName = (toIndex>fromIndex)? 'forward' : 'backward'
}
- 相应的引入写有动画过程的css文件
.forward-enter-active,.forward-leave-active{
transition: 0.5s all ease;
transform: translateX(0);
}
.forward-enter{
transform: translateX(100%);
}
.forward-enter-to{
transform: translateX(0);
}
.forward-leave {
transform: translate3d(0, 0, 0);
}
.forward-leave-to {
transform: translate3d(-100%, 0, 0);
}
.backward-enter-active, .backward-leave-active {
transition: all 0.5s;
}
.backward-leave {
transform: translate3d(0, 0, 0);
}
.backward-leave-to {
transform: translate3d(100%, 0, 0);
}
.backward-enter {
transform: translate3d(-100%, 0, 0);
}
.backward-enter-to {
transform: translate3d(0, 0, 0);
}
- 完成~