2018-07-2512:44:01 第一次发表博客,就是一次学习笔记,功能还不完全了解 不妥之处,大家多提意见
vue在 插入、更新和移除DOM时,提供了多种不同的应用过度效果:
1、在css过渡和动画中自动应用class
2、 可以配合使用第三方库 如 Animate.css
3、在过渡钩子函数中使用JavaScript 直接操作 DOM
4、 可以配合使用第三方动画库, 如Velocity.js
一、过渡和动画中应用class类名
步骤:
1. 找到需要添加过度的元素,把他用transition标签包裹起来,然后给transition标签指定name属性,这个name属性会作为类名的前缀,如果没有定义name属性,默认为 v- 前缀
2. 定义类名。 默认为 v-enter v-enter-active v-enter-to (进入动画) 和 v-leave v-leave-active v-leave-to (离开动画)
<div id="app"> <!-- 1. 找到需要添加过度的元素,把他用transition标签包裹起来,然后给transition标签指定name属性,这个name属性会作为类名的前缀,如果没有定义name属性,默认为 v- 前缀--> <transition name="slide"> <div v-if="isShow">我是中国人</div> </transition> <button @click="isShow=!isShow">点击按钮切换隐藏</button> </div>
<style> /* 2.1 定义进入过渡的开始状态和离开过渡结束状态 */ .slide-enter,.slide-leave-to { padding-left: 160px; } /* 2.2 定义过渡状态 */ .slide-enter-active,.slide-leave-active { transition: all 2s; } /* 2.3 定义进入过渡的结束状态和离开过渡的开始状态 */ .slide-enter-to,.slide-leave { padding-left: 0px; } </style>
<script> var vm = new Vue({ el: '#app', data: { isShow: true } }) </script>
过渡和动画中应用class类名 示意图
二、过渡和动画中 应用第三方动画库 animate.css
步骤:
1、通过 link 标签引入 animate.css 动画库
<link rel="stylesheet" href="./css/animate.css">
2. 把要添加动画的元素用 transition 标签包裹,同时添加动画进入属性 enter-active-class="animated 动画效果的名称" 和 动画离开属性 leave-active-class="animated 动画效果的名称"
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <title>过渡和动画:animate动画库</title> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <script src="./js/vue2.js"></script> 8 <!-- 1. 引入animate.css 文件 --> 9 <link rel="stylesheet" href="./css/animate.css"> 10 </head> 11 <body> 12 <div id="app"> 13 <!-- 2. 把要添加动画的元素用transition标签包裹,同时添加动画进入属性enter-active-class="animated 动画效果的名称" 和 动画离开属性 leave-active-class="animated 动画效果的名称" --> 14 <transition 15 enter-active-class="animated zoomIn" 16 leave-active-class="animated hinge" 17 > 18 <div v-if="isShow">我是中国人,我爱中国</div> 19 </transition> 20 <button @click="isShow=!isShow">点击实现动画效果</button> 21 </div> 22 <script> 23 var vm = new Vue({ 24 el: '#app', 25 data: { 26 isShow: true 27 } 28 }) 29 </script> 30 </body> 31 </html>
三、过渡和动画: 应用 JavaScript 钩子函数
1. 先把需要添加动画的元素用 transition 标签包裹起来
2. 在transition 属性中声明JavaScript钩子
v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter"
v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave"
然后在methods方法中去定义各个函数
代码案例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <title>过渡和动画:JavaScript钩子</title> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <script src="./js/vue2.js"></script> 8 </head> 9 <body> 10 <div id="app"> 11 <!-- 1. 先把先不要添加动画的元素用 transition 标签包裹起来 --> 12 <!-- 2. 在transition 属性中声明JavaScript钩子 13 v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter" 14 v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave" 然后在methods方法中去定义各个函数--> 15 <transition 16 v-on:before-enter="beforeEnter" 17 v-on:enter="enter" 18 v-on:after-enter="afterEnter" 19 20 v-on:before-leave="beforeLeave" 21 v-on:leave="leave" 22 v-on:after-leave="afterLeave" 23 > 24 <div v-if="isShow">我是一个还未出道的程序员</div> 25 </transition> 26 <button @click="isShow=!isShow">点击按钮使用JavaScript做动画</button> 27 </div> 28 <script> 29 var vm = new Vue({ 30 el: '#app', 31 data: { 32 isShow: true 33 }, 34 methods: { 35 beforeEnter(el){ 36 console.log('beforeEnter'); 37 el.style.paddingLeft = '100px' 38 }, 39 //动画结束完成时 一定要调用done 函数 40 enter(el, done){ 41 console.log('enter'); 42 //done() 43 var step = 1; 44 var interval = setInterval(() => { 45 el.style.paddingLeft = (100 - step) + 'px'; 46 step++; 47 if(step === 100){ 48 clearInterval(interval); 49 done(); 50 } 51 },3) 52 }, 53 afterEnter(el){ 54 console.log('afterEnter') 55 }, 56 beforeLeave(el){ 57 console.log('beforeLeave'); 58 el.style.paddingLeft = '0' 59 }, 60 //动画结束完成时 一定要调用done 函数 61 leave(el, done){ 62 console.log('leave') 63 //done() 64 var step = 1; 65 var interval = setInterval(() => { 66 el.style.paddingLeft = (0 + step) + 'px'; 67 step++; 68 if(step === 100){ 69 clearInterval(interval); 70 done(); 71 } 72 },15) 73 }, 74 afterLeave(el){ 75 console.log('afterLeave') 76 } 77 } 78 }) 79 </script> 80 </body> 81 </html>