1.如何编写自己的路由切换动画?
a:路由切换我们可以各router-view 上套一个transition动画
<transition name="slide-left"> <router-view class="position-div"></router-view> </transition>
b:编写自己想要的动画
.slide-left-enter{ opacity:0; transform: translate3d(100%,0,0) } .slide-left-enter-active{ transition: all 300ms } .slide-left-leave-to{ opacity:0; transition: translate3d(-100%,0,0) }
上述已经完成了动画切换的效果,但是我们不想让他只走一边,这样的话该怎么做呢?
2.实现左右切换
我们需要定义两个动画,一个向左一个向右
.slide-right-enter-active, .slide-right-leave-active, .slide-left-enter-active, .slide-left-leave-active { transition: all 300ms; } .slide-right-enter { opacity: 0; transform: translate3d(-100%, 0, 0); } .slide-right-leave-to { opacity: 0; transform: translate3d(100%, 0, 0); } .slide-left-enter { opacity: 0; transform: translate3d(100%, 0, 0); } .slide-left-leave-to { opacity: 0; transform: translate3d(-100%, 0, 0); }
我们需要在路由上定义一个meta属性(稍后提到)
{ path:'path', name:'path', meta:1, component:Path }
这会我们想要通过路由切换的时候去产生向左或向右的动画了,那我们可以监听路由的变化来实现它
<transition :name="transition"> <router-view class="posiiton-div"></router-view> </transition> data(){ return { transitionName:'' } } watch:{ $route(to,from){ if(to.meta > from.meta){ this.transitionName = "slide-left" }else{ this.transitionName = "slide-right" } } }
现在我们来说说,meta我们设置这个属性就是为了判断向左的动画还是向右的动画
3.留白的原因?
以上就是如何编写这个代码,细心的同学就会发现我再router-view上加了一个类名,这个类名是用来干吗的呢,
他就是为了解决我们所说的留白问题,给大家解释这个留白的原因,因为他从一个路由跳转到另一个路由,这个过程是有顺序的,
你第一个动画进行完毕之后才会有第二个动画,那么我们怎样才能实现让他同时去执行,这样就可以完成我们想要的效果了,也就是我们所说的没有留白
4.如何解决留白?
我们可以让我们router-view 脱标,这样就可以实现我们想要的效果了
.position-div{ position:absolute; left:0; right:0; top:0; bottom:0; }
5.什么?还有留白?
我猜你是有多个路由跳转切换动画,如果是这样的话,你把你项目中的所有路由跳转的动画找出来,把他们的动画时间设置为一样的,如果成了之后,你自然就会明白道理,
如果不行,或者你不是这个原因,那就直接来问我吧
6.总结
在最后我将写动画切换的步骤,关键点总结一下
第一步:给router-view添加transition,设置动态名称
第二步:写向左向右的两种动画
第三步:监听路由的变化,实现在你的需求下出现你想要的动画
第四步:给router-view设置为绝对定位,让他脱离标准流就可以了
来源:CSDN
作者:风间琉璃丷
链接:https://blog.csdn.net/qq_37167086/article/details/104261790