27.Vue中的js动画与Velocity.js库结合

引言:

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. 引包
1
<script src="js/velocity.js"></script>	
  1. 使用
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});//这里要加done函数
},
handleAfterEnter(el){
alert('动画结束')
}
}
})
</script>
</body>