引言:
js写动画
再加上Velocity库
js动画
我们可以借助生命钩子来实现动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <body> <div id="root"> <div> <transition name='fade' @before-enter='handleBeforeEnter' @enter='handleEnter' @after-enter='handleAfterEnter' > <div v-if="show">你好</div> </transition> <button @click="handleClick">切换</button> </div> </div>
<script> let vm = new Vue({ el:'#root', data:{ show: true }, methods:{ handleClick(){ this.show=!this.show }, handleBeforeEnter(el){ el.style.color='red' }, //这里有一个参数el handleEnter(el,done){ setTimeout(() => { el.style.color='green' },2000); setTimeout(() => { done()//没有事件也要加上,表示动画已经结束 },4000) }, //两个参数,el和done,done是一个回调函数 handleAfterEnter(el){ el.style.color='#000' } } }) </script> </body>
|
使用Velocity库
- 引包
1
| <script src="js/velocity.js"></script>
|
- 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <body> <div id="root"> <div> <transition name='fade' @before-enter='handleBeforeEnter' @enter='handleEnter' @after-enter='handleAfterEnter' > <div v-if="show">你好</div> </transition> <button @click="handleClick">切换</button> </div> </div>
<script> let vm = new Vue({ el:'#root', data:{ show: true }, methods:{ handleClick(){ this.show=!this.show }, handleBeforeEnter(el){ el.style.opacity = 0; }, handleEnter(el,done){ Velocity(el,{opacity: 1},{duration:1000,complete:done}); }, handleAfterEnter(el){ alert('动画结束') } } }) </script> </body>
|