vue动画中的过渡组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<button @click="which=='com1' ? which='com2' : which='com1' ">toggle</button>
<transition-com>
<component :is="which"></component>
</transition-com>
</div>
<script>
Vue.component('transition-com', {
template: `
<transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" @before-leave="beforeLeave" @leave="leave" @after-leave="afterLeave" mode="out-in" appear >
<slot></slot>
</transition>
`,
methods: {
beforeEnter(el) {
el.style.opacity = '0';
},
enter(el,done) {
el.offsetWidth;
el.style.opacity = '1';
el.style.transition = 'all 2s';
done();
},
afterEnter(el) {
el.style.opacity = '1';
}
,
beforeLeave(el) {
el.style.opacity = '1';
},
leave(el,done) {
el.offsetWidth;
el.style.opacity = '0';
el.style.transition = 'all 2s';
setTimeout(done,2000);
},
afterLeave(el) {
el.style.opacity = '0';
}
}
});
Vue.component('com1', {
template: `<div>123</div>`
});
Vue.component('com2', {
template: `<div>abc</div>`
});
var vm = new Vue({
el: '#app',
data: {
which: 'com1'
}
})
</script>
</body>
</html>