Vue中多元素过渡特效的解决方案

2020-06-16 06:51:03易采站长站整理

new Vue({
el: '#demo',
data: {
isOn: true
},
})
</script>

在 “on” 按钮和 “off” 按钮的过渡中,两个按钮都被重绘了,一个离开过渡的时候另一个开始进入过渡。这是 <transition> 的默认行为 – 进入和离开同时发生

同时生效的进入和离开的过渡不能满足所有要求,所以 Vue 提供了过渡模式

in-out: 新元素先进行过渡,完成之后当前元素过渡离开。

out-in: 当前元素先进行过渡,完成之后新元素过渡进入。

in-out

下面使用in-out来重写之前的开关按钮过渡


<div id="demo">
<transition name="fade" mode="in-out">
<button :key="isOn" @click="isOn = !isOn">{{ isOn ? 'On' : 'Off' }}</button>
</transition>
</div>

out-in

下面使用out-in来重写之前的开关按钮过渡


<div id="demo">
<transition name="fade" mode="out-in">
<button :key="isOn" @click="isOn = !isOn">{{ isOn ? 'On' : 'Off' }}</button>
</transition>
</div>

滑动过渡

当元素设置为绝对定位,并互相覆盖,实现透明度过渡效果


<style>
#demo{position:relative;}
#demo button{position:absolute;left:40px;}
.fade-enter,.fade-leave-to{opacity:0;}
.fade-enter-active,.fade-leave-active{transition: 1s;}
</style>
<div id="demo">
<transition name="fade" >
<button :key="isOn" @click="isOn = !isOn">{{ isOn ? 'On' : 'Off' }}</button>
</transition>
</div>
<script>
new Vue({
el: '#demo',
data: {
isOn: true
},
})
</script>

下面是一个使用absolute和translate实现的类似滑动 


<style>
#demo{position:relative;}
#demo button{position:absolute;left:40px;}
.fade-enter,.fade-leave-to{opacity:0;}
.fade-enter{transform:translateX(30px);}
.fade-leave-to{transform:translateX(-30px);}
.fade-enter-active,.fade-leave-active{transition: 1s;}
</style>

如果设置in-out模式,将实现更酷的滑动效果


<style>
#demo{position:relative;}
#demo button{position:absolute;left:40px;}
.fade-enter,.fade-leave-to{opacity:0;}
.fade-enter{transform:translateX(30px);}
.fade-leave-to{transform:translateX(-30px);}
.fade-enter-active,.fade-leave-active{transition: 1s;}
</style>
<div id="demo">
<transition name="fade" mode="in-out">
<button :key="isOn" @click="isOn = !isOn">{{ isOn ? 'On' : 'Off' }}</button>