Skip to content

手风琴

👑首创

TuiAccordion 是一种交互式的内容展示组件。 与传统的垂直折叠面板不同,它通常以水平或垂直的滑片形式存在。默认情况下,它展示一组折叠的标签,鼠标悬停(或点击)时展开当前项并收起其他项,非常适合展示并列的图文信息或画廊。

基础用法

默认模式 (Default)

最基础的用法,适用于展示文本或自定义 DOM 内容。

  • direction: 默认为 h (水平)。
  • itemMinSize: 设置收起状态下项目的宽度(像素)。
html
<script setup>
const items = [
  { title: '工作台', icon: 'tui-icon ti-star', type: 'primary' },
  { title: '消息', icon: 'tui-icon ti-message', type: 'success' },
  { title: '设置', icon: 'tui-icon ti-settings', type: 'warning' }
];
</script>

<template>
  <TuiAccordion :height="300">
    <TuiAccordionItem 
      v-for="(item, index) in items" 
      :key="index"
      :index="index"
      :title="item.title"
      :icon="item.icon"
      :type="item.type"
    >
      <div class="content">
        这里是展开后的详细内容区域...
      </div>
    </TuiAccordionItem>
  </TuiAccordion>
</template>

图片画廊模式

设置 contentType="image" 可开启专用的图片展示模式。 此时组件会自动优化布局,将 image 属性渲染为背景,并配合遮罩层展示标题和描述。

html
<template>
  <TuiAccordion contentType="image" :height="400">
    <TuiAccordionItem 
      v-for="(img, index) in images" 
      :key="index"
      :index="index"
      :image="img.src"
      :title="img.title"
      description="这是图片的详细描述文案..."
      :hasLinkButton="true"
      @navigateTo="handleViewDetail(index)"
    />
  </TuiAccordion>
</template>

方向与布局

垂直手风琴 (Vertical)

设置 direction="v" 即可切换为纵向布局。

注意

在垂直模式下,itemMinSize 控制的是收起状态的高度。

html
<TuiAccordion direction="v" :height="500">
  </TuiAccordion>

视觉与色彩定制

TuiAccordion 深度集成了 TuiTyped 组件,提供了强大的色彩管理能力。

语义化颜色

TuiAccordionItem 上直接设置 type 属性 (primary, success, danger 等),组件会自动应用对应的主题色条或背景。

自定义颜色 (TypeColor)

如果预设的语义色无法满足需求,可通过 typeColor 属性传入任意 CSS 颜色值。

html
<TuiAccordionItem 
  :index="0" 
  title="自定义紫" 
  typeColor="#722ed1" 
/>

全局外观配置 (TypedConfig)

通过 typedConfig 属性,可以统一控制内部颜色条的外观风格(例如使用 line 线条风格或 background 背景风格)。

html
<template>
  <TuiAccordion 
    :typedConfig="{ appearance: 'line', tone: 'base' }"
  >
    ...
  </TuiAccordion>
</template>

交互配置

  • trigger: 触发方式,默认为 'hover',可改为 'click'
  • autoplay: 是否开启自动轮播。
  • interval: 自动轮播间隔 (ms)。
  • pauseOnHover: 鼠标悬停在内容区时是否暂停轮播。
  • motionBlur: 是否开启切换时的动态模糊特效(增强速度感)。
html
<TuiAccordion 
  trigger="click" 
  autoplay 
  :interval="5000" 
  :motionBlur="false"
>
  ...
</TuiAccordion>

API 参考

TuiAccordion Props

属性名类型默认值说明
directionString'h'布局方向。可选:h (水平), v (垂直)。
contentTypeString'default'内容渲染模式。可选:default, image
heightNumber/String-容器高度。
widthNumber/String-容器宽度。
itemMinSizeNumber40收起项的宽度/高度 (px)。
initialIndexNumber0初始展开的索引。
autoplayBooleantrue是否自动播放。
intervalNumber3000自动播放间隔 (ms)。
triggerString'hover'展开触发方式。可选:hover, click
motionBlurBooleantrue是否开启动态模糊。
activeShowTitleBooleantrue展开项是否保留显示标题栏。
typedConfigObject-透传给内部 TuiTyped 的配置 (如 appearance, tone)。
resizeObserverString'global'尺寸监听策略。

TuiAccordionItem Props

属性名类型默认值说明
indexNumberRequired必填。当前项的索引值。
titleString-标题文本。
descriptionString-描述文本。
iconString-图标类名。
imageString-图片地址(仅在 contentType="image" 时有效)。
typeString'default'语义类型颜色。可选:primary, success, warning, danger 等。
typeColorString-自定义颜色值(覆盖 type)。
hasLinkButtonBooleanfalse是否显示跳转按钮。

TuiAccordionItem Events

事件名说明回调参数
navigateTo点击跳转按钮时触发。-