vue如何进行动画的封装

<style>   .v-enter,.v-leave-to{     opacity: 0;   }   .v-enter-active,.v-leave-active{     transition:opacity 1s;   } </style> <div>   <transition>     <div v-if='show'>hello 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>

有时候这种渐隐渐现的效果用的比较多,要复用,需要封装一下,怎么封装呢

<style>   .v-enter,.v-leave-to{     opacity: 0;   }   .v-enter-active,.v-leave-active{     transition:opacity 1s;   } </style> <div>   <fade :show='show'>     <div>hello world</div>   </fade>   <fade :show='show'>     <h1>hello world</h1>   </fade>   <button @click='handleClick'>切换</button> </div> <script> Vue.component('fade',{   props:['show'],   template: `     <transition>       <slot v-if='show'></slot>     </transition>   ` }) var vm = new Vue({   el:'#app',   data:{     show:false   },   methods:{     handleClick:function(){       this.show = !this.show;     }   } }) </script>

可以这样封装,将dom元素传入slot,除了这样,还可以样式一起封装进去

<div>   <fade :show='show'>     <div>hello world</div>   </fade>   <fade :show='show'>     <h1>hello world</h1>   </fade>   <button @click='handleClick'>切换</button> </div> <script> Vue.component('fade',{   props:['show'],   template: `     <transition @before-enter='handleBeforeEnter' @enter='handleEnter'>       <slot v-if='show'></slot>     </transition>   `,   methods:{     handleBeforeEnter:function(el){       el.style.color='red'     },     handleEnter:function(el,done){       setTimeout(()=>{         el.style.color='green';         done();       },2000)     }   } }) var vm = new Vue({   el:'#app',   data:{     show:false   },   methods:{     handleClick:function(){       this.show = !this.show;     }   } }) </script>

把样式一起封装进来,是比较推荐的方式。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/947cc130afd2eaec5fd64b3bb53f1b61.html