我在使用vue转换时遇到了一些麻烦,也许你们中的一些人可以帮助我?我想实现的是一个使用vue转换的简单,轻巧的折叠组件。
因此,在我目前的方法中,每次塌陷塌陷时,应将其高度设置为contentHeight
,然后紧随其后设置为0
(以及展开时的相反方向)。或在Vue Transition的JavaScript挂钩中说:
0
contentHeight
auto
contentHeight
0
这是当前的方法:
<template>
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
>
<div
v-if="isCollapsed === false"
:style="componentStyles"
class="UiCollapse"
>
<div
ref="content"
class="UiCollapse-content"
>
<slot/>
</div>
</div>
</transition>
</template>
<script>
export default {
name: "UiCollapse",
props: {
isCollapsed: {
type: Boolean,
default: false
}
},
data() {
return {
componentStyles: {
height: undefined
}
};
},
methods: {
beforeEnter() {
this.setHeight(0);
},
enter() {
this.setHeight(this.getContentHeight());
},
afterEnter() {
this.setHeight(undefined);
},
beforeLeave() {
this.setHeight(this.getContentHeight());
},
leave() {
this.setHeight(0);
},
afterLeave() {
this.setHeight(0);
},
setHeight(height) {
this.componentStyles.height = height;
},
getContentHeight() {
return this.$refs.content.scrollHeight + "px";
}
}
};
</script>
<style scoped>
.UiCollapse {
display: block;
height: auto;
overflow: hidden;
}
.UiCollapse.v-enter-active,
.UiCollapse.v-leave-active {
transition: height 0.3s ease;
}
.UiCollapse-content {
display: block;
}
</style>
通过这种方法,应该考虑内容的动态高度以及影响其高度的内容更改。
我还将其转移到了一个codeandbox:https://codesandbox.io/s/yq1nw51yq9
在这里我期望的是平滑的打开和关闭过渡(在CSS中定义),但是正如您在该项目中看到的那样,这仅部分起作用,我不明白为什么。你们有任何想法吗?
也许这不是正确的方法,我对其他方法或已经存在的库都持开放态度(尽管我更愿意在这里理解vue转换),但是到目前为止,我发现的解决方案是使用{{1 }}或其他我想避免的解决方法。
在此先感谢您的帮助!
答案 0 :(得分:0)
那扩展面板组件呢?我不确定您真正想做什么,但这至少可以帮助您。 https://vuetifyjs.com/en/components/expansion-panels