vue transition动画学习

匿名 (未验证) 提交于 2019-12-02 23:56:01

文章参考

  1. 进入/离开 & 列表过渡

问题描述

今天在学习Vue动画的时候,发现对组件的属性不熟悉,以下作为复习的内容

概念解释

  1. 动画状态分为“开始状态” ---- “过渡状态” ----“结束状态”
  2. 显示: enter ------ enter-active ------- enter-to
  3. 隐藏: leave ------- leave-active ------ leave-to

案例

自定义动画

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>     <script src="../js/vue.js"></script> </head> <style> .box{     height: 100px;     width: 100px;     background-color: rebeccapurple;     display: inline-block; } .fade-enter{     opacity: 0;     background-color: green;     transform: rotate(0deg);     transform: scale(2, 4) }  .fade-enter-active{     transition: all 3s; }  .fade-enter-to{     opacity: 1;     background-color: red;     transform: rotate(360deg); }  .fade-leave{     opacity: 1; }  .fade-leave-active{     transition: all 3s; }  .fade-leave-to{     opacity: 0;     transform: translate(300px, 200px); }  </style> <body>     <div id="app">         <transition name='fade'>             <div class="box" v-if='isShow'></div>         </transition>         <div>             <button @click='toggleAction'>切换</button>         </div>     </div> </body> <script>   /** */  var app = new Vue({     el: '#app',     data: function () {         return {             isShow: true         }     },     methods: {         toggleAction: function () {             this.isShow = !this.isShow;         }     }, }) </script> </html> 
  1. <transition name='fade'>中的name值是作为样式的名字
  2. 触发动画尽量用 v-if
  3. 因为name=‘fade’,所以进入的样式是 fade-enterfade-enter-activefade-enter-to
    • fade-enter 表示显示的初始样式
    • fade-enter-to 表示的是显示最后的样式
    • fade-enter-active 表示的是从fade-enter到fade-enter-to样式过渡的时间
  4. 因为name=‘fade’,所以进入的样式是 fade-leavefade-leave-activefade-leave-to
    • fade-leave 表示删除的初始样式
    • fade-leave-to 表示的是删除最后的样式
    • fade-leave-active 表示的是从fade-leave 到fade-leave-to样式过渡的时间

引用animate.css动画

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>     <link rel="stylesheet" href="../js/animate.css">     <script src="../js/vue.js"></script> </head> <style> .box{     height: 100px;     width: 100px;     background-color: rebeccapurple;     display: inline-block; } </style> <body>     <div id="app">         <transition              leave-active-class='flash animated'             enter-active-class='rollIn animated'         >             <div class="box" v-if='isShow'></div>         </transition>         <div>             <button @click='toggleAction'>切换</button>         </div>     </div> </body> <script>   var app = new Vue({     el: '#app',     data: function () {         return {             isShow: true         }     },     methods: {         toggleAction: function () {             this.isShow = !this.isShow;         }     }, }) </script> </html> 

动画钩子函数

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>     <link rel="stylesheet" href="../js/animate.css">     <script src="../js/vue.js"></script> </head> <style> .box{     height: 100px;     width: 100px;     background-color: rebeccapurple;     display: inline-block; }  </style> <body>     <div id="app">         <transition              leave-active-class='flash animated'             enter-active-class='rollIn animated'                          v-on:before-enter="beforeEnter"             v-on:enter="enter"             v-on:after-enter="afterEnter"             v-on:enter-cancelled="enterCancelled"              v-on:before-leave="beforeLeave"             v-on:leave="leave"             v-on:after-leave="afterLeave"             v-on:leave-cancelled="leaveCancelled"         >             <div class="box" v-if='isShow'></div>         </transition>         <div>             <button @click='toggleAction'>切换</button>         </div>     </div> </body> <script>   /** */  var app = new Vue({     el: '#app',     data: function () {         return {             isShow: true         }     },     methods: {         toggleAction: function () {             this.isShow = !this.isShow;         },         beforeEnter: function () {             console.log('beforeEnter')         },         enter: function () {             console.log('enter')         },         afterEnter: function () {             console.log('afterEnter')         },         enterCancelled: function () {             console.log('enterCancelled')         },         beforeLeave: function () {             console.log('beforeLeave')         },         leave: function () {             console.log('leave')         },         afterLeave: function () {             console.log('afterLeave')         },         leaveCancelled: function () {             console.log('leaveCancelled')         }     }, }) </script> </html> 

案例解析

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!