第一步:
給路由router-view添加動畫,必須name 和 key都設置,如果沒有唯一值key,就會沒有動畫效果
<transition :name="transitionName">
<router-view class="child-view"
:key="$route.name"></router-view>
</transition>
第二步:
在data里定義動畫變量:transitionName
data () {
return {
transitionName: ''
};
},
第三步:
監測路由變化,判斷前進還是后退,進行不同的class賦值
watch: {
$route: {
deep: true,
immediate: true,
handler (to, from) {
if (from != undefined && to.meta.footerIndex > from.meta.footerIndex) {
this.transitionName = 'slide-left';
} else {
this.transitionName = 'slide-right';
}
}
},
},
第四步:
設置class
/* 動畫效果 */
.child-view {
position: absolute;
width: 100%;
transition: all 0.8s cubic-bezier(0.55, 0, 0.1, 1);
}
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
will-change: transform;
transition: all 500ms;
position: absolute;
}
.slide-right-enter {
opacity: 0;
transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
opacity: 0;
transform: translate3d(-100%, 0, 0);
}
第五步:
設置路由,需注意設置每個路由的獨有的key,如我設置的就是footerIndex
{
path: '/',
name: 'index',
meta: { footerIndex: 0 },
component: index
},
{
path: '/college',
name: 'college',
meta: { footerIndex: 1 },
component: college,
},
{
path: '/collegeMajor/:attr/:type/:area',
name: 'collegeMajor',
meta: {footerIndex: 2 },
component: college,
},
{
path: '/major',
name: 'major',
meta: { footerIndex: 2 },
component: major
}
