在Vue开发中 我们有时需要给场景切换加上一个过场动画 但是有一个难题 过场动画如何判断到底是进还退出的
我在网上也找过很多方法,比如最常见的就是给路由的meta中加一个标识 通过标识判断大小 从而知道是退是进
但是如果路由很多,怎么办,那要判断标识都是一个难题,
苦思冥想许久,突然想到一个究极解决办法,我们可以通过时间来判断,我们在路由守卫中,每当进入一个路由之前,
给他加个时间戳
router.beforeEach(async (to, from, next) => {
if(!to.meta.Time)
to.meta.Time = new Date().getTime().toString();
});
然后直接判断时间戳的大小,
时间戳大的肯定是进,小的肯定是退出,
通过它不就可以判断是前进是退出了吗
$route: {
handler: function(route,oldRoute) {
let to,from;
if(route) to = route.meta.Time;
if(oldRoute) from = oldRoute.meta.Time;
if(to < from){
//设置动画名称 出来是从左往右
this.transitionName = 'slide-right';
}else{
// 进去是从右往左
this.transitionName = 'slide-left';
}
},
immediate: true
},
<transition :name="transitionName">
<router-view class="router" />
</transition>
<style>
.router{
width:100%
}
.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);
}
</style>