This commit is contained in:
parent
18458f418f
commit
2389857be8
|
@ -8,9 +8,18 @@
|
||||||
<template v-else><fa :icon="faAngleDown"/></template>
|
<template v-else><fa :icon="faAngleDown"/></template>
|
||||||
</button>
|
</button>
|
||||||
</header>
|
</header>
|
||||||
<div v-show="showBody">
|
<transition name="container-toggle"
|
||||||
<slot></slot>
|
@before-enter="beforeEnter"
|
||||||
</div>
|
@enter="enter"
|
||||||
|
@after-enter="afterEnter"
|
||||||
|
@before-leave="beforeLeave"
|
||||||
|
@leave="leave"
|
||||||
|
@after-leave="afterLeave"
|
||||||
|
>
|
||||||
|
<div v-show="showBody">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -51,12 +60,45 @@ export default Vue.extend({
|
||||||
toggleContent(show: boolean) {
|
toggleContent(show: boolean) {
|
||||||
if (!this.bodyTogglable) return;
|
if (!this.bodyTogglable) return;
|
||||||
this.showBody = show;
|
this.showBody = show;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
beforeEnter(el) {
|
||||||
|
el.style.height = '0';
|
||||||
|
},
|
||||||
|
enter(el) {
|
||||||
|
setTimeout(() => {
|
||||||
|
el.style.height = el.scrollHeight + 'px';
|
||||||
|
}, 10); // HACKY: Vueのバグか知らないけどこうしないと動作しない
|
||||||
|
},
|
||||||
|
afterEnter(el) {
|
||||||
|
el.style.height = 'auto';
|
||||||
|
},
|
||||||
|
beforeLeave(el) {
|
||||||
|
el.style.height = el.scrollHeight + 'px';
|
||||||
|
},
|
||||||
|
leave(el) {
|
||||||
|
setTimeout(() => {
|
||||||
|
el.style.height = '0';
|
||||||
|
}, 10); // HACKY: Vueのバグか知らないけどこうしないと動作しない
|
||||||
|
},
|
||||||
|
afterLeave(el) {
|
||||||
|
el.style.height = 'auto';
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.container-toggle-enter-active, .container-toggle-leave-active {
|
||||||
|
transition: opacity 0.5s, height 0.5s !important;
|
||||||
|
}
|
||||||
|
.container-toggle-enter {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.container-toggle-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.ukygtjoj {
|
.ukygtjoj {
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -72,6 +114,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
> header {
|
> header {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
box-shadow: 0 1px 0 0 var(--divider);
|
||||||
|
|
||||||
> .title {
|
> .title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
Loading…
Reference in New Issue