多个元素的过渡前端
<style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-acitve,.v-leave-active{ opacity: opacity 1s; } </style> <div id='app'> <transition> <div v-if='show'>hello world</div> <div v-else>bye world</div> </transition> <button @click='handleClick'>切换</button> </div> <script> var vm = new Vue({ el:'#app', data:{ show:true }, methods:{ handleClick:function(){ this.show = !this.show; } } }) </script> //前端全栈学习交流圈:866109386 //面向1-3经验年前端开发人员 //帮助突破技术瓶颈,提高思惟能力
按照以前的写法方式,渐隐渐出的效果并无出现该有的效果,那么为何呢? 在if else两个元素切换的时候,会尽可能的复用dom,正是vue,dom的复用,致使动画的效果不会出现,若是想要vue不去复用dom,以前也说过,怎么作呢,给两个div不一样的key值就好了vue
<div v-if='show' key='hello'>hello world</div> <div v-else key='bye'>bye world</div>
这样就能够有个明显的动画效果,多个元素过渡动画的效果。app
transition还提供了一个mode属性,in-out是先显示再隐藏,out-in是先隐藏再显示dom
多个组件的过渡学习
<style> .v-enter, .v-leave-to { opacity: 0; } .v-enter-acitve, .v-leave-active { transition: opacity 1s; } </style> <div id='app'> <transition mode='out-in'> <child v-if='show'></child> <child-one v-else></child-one> </transition> <button @click='handleClick'>切换</button> </div> <script> Vue.component('child',{ template:'<div>child</div>' }) Vue.component('child-one',{ template:'<div>child-one</div>' }) var vm = new Vue({ el:'#app', data:{ show:true }, methods:{ handleClick:function(){ this.show = !this.show; } } }) </script> //前端全栈学习交流圈:866109386 //面向1-3经验年前端开发人员 //帮助突破技术瓶颈,提高思惟能力
这个就是多个组件的过渡,采用的是上面的方式,替换子组件,那么咱们换一种方式,用动态组件动画
<style> .v-enter, .v-leave-to { opacity: 0; } .v-enter-acitve, .v-leave-active { transition: opacity 1s; } </style> <div id='app'> <transition mode='out-in'> <component :is='type'></component> </transition> <button @click='handleClick'>切换</button> </div> <script> Vue.component('child',{ template:'<div>child</div>' }) Vue.component('child-one',{ template:'<div>child-one</div>' }) var vm = new Vue({ el:'#app', data:{ type:'child' }, methods:{ handleClick:function(){ this.type = (this.type === 'child' ? 'child-one' : 'child') } } }) </script>
这样也实现了多个组件的过渡效果。this