<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave">
<template v-if="table.show">
-----
</template>
</transition>
<script>
// 折叠面板的事件
export default {
methods: {
beforeLeave(el) {// 给元素设置过渡效果
el.style.transition = '0.3s height ease-in-out';// 高度变化时,让其内容隐藏
el.style.overflow = 'hidden';
},
leave(el) {
el.style.height = 'auto';// 设置高度为具体的值
el.style.height = window.getComputedStyle(el).height;// 强制浏览器回流,否则浏览器会合并两次元素的高度更改(回流重绘的知识)
el.offsetHeight;
el.style.height = '0px';
},
afterLeave(el) {//
el.style.height = null;// 收尾工作,展示完过渡效果之后,设为原来的值
el.style.transition = '';
el.style.overflow = 'visible';
},
beforeEnter(el) {// 给元素设置过渡效果
el.style.transition = '.3s height ease-in-out';// 高度变化时,让其内容隐藏
el.style.overflow = 'hidden';
},
enter(el) {
el.style.height = 'auto';// 保存元素原来的高度
const endWidth = window.getComputedStyle(el).height;
el.style.height = '0px';// 强制浏览器回流,否则浏览器会合并两次元素的高度更改(回流重绘的知识)
el.offsetHeight;
el.style.height = endWidth;
},
afterEnter(el) {//
el.style.height = null;// 收尾工作,展示完过渡效果之后,设为原来的值
el.style.transition = '';
el.style.overflow = 'visible';
}
}
}
</script>