详解vue动画的封装

本文实例为大家分享了vue动画封装的具体代码,供大家参考,具体内容如下

前端精品教程:百度网盘下载

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

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

前端精品教程:百度网盘下载

?
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
< style >
  .v-enter,.v-leave-to{
    opacity: 0;
  }
  .v-enter-active,.v-leave-active{
    transition:opacity 1s;
  }
</ style >
 
 
< div id = 'app' >
  < 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,除了这样,还可以样式一起封装进去

?
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
< div id = 'app' >
  < 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 >

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

前端精品教程:百度网盘下载

转载于:https://www.cnblogs.com/zanguixuan/p/9811149.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值