Skip to content

FxCollapseTransition 折叠过渡

FxCollapseTransition 属于 @fx/components,不依赖任何 UI 框架。被 FxCollapse / FxTree 等组件内部复用,也可单独用于任意需要展开/收起过渡的内容。

基于 max-height + requestAnimationFrame 实现高度自适应的展开/收起过渡:无需提前知道内容高度,过渡过程中内容高度变化(如动态增删行)也会被正确计算。过渡时长由 @fx/styles 全局样式(.fx-collapse-transition-enter-active / -leave-active)提供。

基础用法

v-show(或 v-if)控制子节点显隐,外层包一个 FxCollapseTransition 即可获得平滑的高度过渡。

TIP

子节点应当是单个根元素。过渡通过读取该元素的 scrollHeight 计算目标高度,因此内容高度可任意变化。

API

Attributes

无。FxCollapseTransition 是纯过渡包裹组件,不接受任何属性。

Slots

插槽名说明类型
default需要应用展开/收起过渡的内容(建议为单个根元素,配合 v-show 控制显隐)

局部引入

ts
import { FxCollapseTransition } from "@fx/components"
vue
<script setup lang="ts">
import { ref } from "vue"
import { FxCollapseTransition } from "@fx/components"

const show = ref(true)
</script>

<template>
  <FxCollapseTransition>
    <div v-show="show">展开 / 收起的内容</div>
  </FxCollapseTransition>
</template>

注意事项

  • 必须引入 @fx/styles 的全局样式,过渡时长类(.fx-collapse-transition-enter-active 等)才能生效。
  • 子节点用 v-showv-if 更合适:v-show 仅切换显隐、节点始终在 DOM 中,过渡钩子能稳定读取 scrollHeightv-if 在首次渲染时元素尚未挂载,可能出现无过渡的情况。
  • 同一实例在快速 open→close→open 切换时会自动取消上一个未触发的 requestAnimationFrame,避免重复回调导致闪烁。