vue实现多个元素或多个组件之间动画效果

时间:2021-05-26

本文实例为大家分享了vue实现多个元素或多个组件之间动画的具体代码,供大家参考,具体内容如下

多个元素的过渡

<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>

按照之前的写法方式,渐隐渐出的效果并没有出现该有的效果,那么为什么呢?

在if else两个元素切换的时候,会尽量的复用dom,正是vue,dom的复用,导致动画的效果不会出现,如果想要vue不去复用dom,之前也说过,怎么做呢,给两个div不同的key值就行了

<div v-if='show' key='hello'>hello world</div><div v-else key='bye'>bye world</div>

这样就可以有个明显的动画效果,多个元素过渡动画的效果。

transition还提供了一个mode属性,in-out是先显示再隐藏,out-in是先隐藏再显示

多个组件的过渡

<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>

这个就是多个组件的过渡,采用的是上面的方式,替换子组件,那么我们换一种方式,用动态组件

<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>

这样也实现了多个组件的过渡效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章