vue中封裝動畫元件(漸隱漸現效果)
阿新 • • 發佈:2019-01-28
<body>
<div id="root">
<comp :dis="show">
<div>hello</div>
</comp>
<comp :dis="show">
<h1>hello</h1>
</comp>
<button @click="btnclick">toggle</button>
</div>
<script>
let comp = {//封裝的元件
props:["dis"],
template:`
<transition
@before-enter="handleBeforeEnter"
@enter="handleEnter"
@after-enter="handleAfterEnter"
@before-leave="handleBeforeLeave"
@leave="handleLeave"
@after-leave="handleAfterLeave"
>
<slot v-if="dis"></slot>
</transition>
`,
methods:{
handleBeforeEnter:function(el){
el.style.opacity = 0;
},
handleEnter:function(el,done){
Velocity(el,{opacity:1 },{duration:1000,
complate:done
})
},
handleAfterEnter:function(el){},
handleBeforeLeave:function(el){},
handleLeave:function(el,done){
Velocity(el,{opacity:0},{
duration:1000,
complate:done //done是必須的,觸發之後,才會走下一階段handleAfterLeave,可以檢視http://velocityjs.org/#beginAndComplete
})
},
handleAfterLeave:function(el){
el.style.opacity = 0;
}
}
}
var vm = new Vue({
el:'#root',
data:{
show:true
},
methods:{
btnclick:function(){
this.show = !this.show;
}
},
components:{
comp
}
})
</script>
</body>