console
var app = new Vue({
el: '#app',
data() {
return {
show: true
}
},
components: {
'v-a': {
template: '<div>Component A</div>'
},
'v-b': {
template: '<div>Component B</div>'
},
'my-special-transition': {
template: ' <transition\
name="very-special-transition"\
mode="out-in"\
v-on:before-enter="beforeEnter"\
v-on:enter="enter"\
v-on:after-enter="afterEnter"\
v-on:before-leave="beforeLeave"\
v-on:leave="leave"\
>\
<slot></slot>\
</transition>\
',
methods:{
beforeEnter(el) {
el.style.transform='translate(80px,80px)';
},
enter(el,done){
el.offsetWidth;
el.style.transition='all 1.5s ease';
el.style.transform='translate(0,0)';
done()
},
afterEnter(el){
console.log('afterEnter');
},
beforeLeave: function (el) {
el.style.transform='translate(0,0)';
},
leave: function (el, done) {
el.offsetWidth;
el.style.transition='all 3s ease';
el.style.transform='translate(80px,80px)';
el.style.opacity= '0'
console.log('leave')
}
}
}
},
});
<div id="app">
<button @click="show = !show">
动态组件
</button>
<my-special-transition :show=show>
<p v-if="show">hello</p>
</my-special-transition>
</div>