Skip to content

Bubble 对话气泡

使用import { Bubble } from 'vue-element-plus-x'
文档
编辑此页更新日志Issue 反馈

💌 Info

2.0.0 版本 移除了内置的 Typewriter 打字器组件。如需 Markdown 渲染功能,请使用 x-markdown-vue

介绍

Bubble 是一个对话气泡组件,常用于聊天的时候。它可以展示对话内容,支持自定义头像、头部、内容、底部,并且具备加载状态展示。

代码演示

基本使用

hello world !

最简化的集成方式。

头像、位置

cover
Good morning, how are you?
What a beautiful day!
Hi, good morning, I'm fine!
Hi, good morning, I'm fine! Thank you!

通过 #avatar 设置自定义头像。通过 placement 属性设置位置,提供了 startend 两个选项值。

💡 Tip

😸 内置 element-plus el-avatar 组件。但是为避免属性名重复,例如:el-avatarBubbleshape 属性。你需要用以下属性设置

  1. 属性
  • avatar 设置头像占位图片
  • avatar-size 设置头像占位大小 👉这个属性在 el-avatar组件number类型,这里注意在此组件上是 string类型 以更好自定义样式属性😊
  • avatar-gap 设置头像和气泡之间的距离
  • avatar-shape 设置头像形状
  • avatar-icon 设置头像占位图标
  • avatar-src-set 设置头像图片 srcset 属性
  • avatar-alt 设置头像图片的 alt 属性
  • avatar-fit 设置头像占位图片的填充模式
  1. 事件
  • @avatar-error 当头像加载失败时触发。

头部、底部

加载状态

loading...
感谢使用 Element-Plus-X 🌹 请稍后...
状态:

通过 loading 属性设置加载中状态。支持通过 #loading 插槽自定义加载中状态内容展示。

💌 Info

#loading 插槽 优先级更高,内置的加载中样式将失效。但 loading 属性任然可以控制 加载中状态。

自定义内容

cover
😊 欢迎使用 element-plus-x,我是自定义气泡
推荐内容 自定义气泡
🥤 长时间工作后如何有效休息?
💌 保持积极心态的秘诀是什么?
🔥 如何在巨大的压力下保持冷静?

通过 #content 插槽,自定义气泡内容。

💌 Info

#content 插槽 优先级更高,content 属性将失效。 no-padding 属性可以禁用气泡内容内边距。

变体和形状

filled
filled + round
filled + corner
borderless
borderless + round
borderless + corner
outlined
outlined + round
outlined + corner
shadow
shadow + round
shadow + corner
round
corner
placement end

通过 variant 属性设置气泡的填内置样式格式。通过 shape 属性设置气泡的形状。当然你也可以两两结合,搭配使用

💌 Info

默认情况下,variantfilledshaperound

shapecorner 时,placement="end" 会自动将气泡翻转,使得右上角的 弧度针 指向用户。

自定义主题

通过 ConfigProvider.themeOverrides 覆盖 Bubble 的主题变量。完整变量表与可复制模板见:

开启覆写后,气泡内容最大宽度会变窄。
这是一个 start 气泡。覆写后会变成渐变背景 + 大圆角 + 更强阴影。
这是一个 end 气泡。通过 themeOverrides 你可以把 Bubble 做成统一的“玻璃风”主题。

通过 ConfigProvider.themeOverrides 覆盖 Bubble 的主题变量(背景、边框、圆角、padding、宽度等),开关前后会有明显反差。

与 x-markdown-vue 结合使用

从 v2.0.0 开始,Typewriter 组件已移除。如需 Markdown 渲染功能,请使用 x-markdown-vue,或查看专属文档:XMarkdown

安装

bash
pnpm add x-markdown-vue
pnpm add katex
pnpm add shiki shiki-stream

💡 Tip

如果需要代码块语法高亮功能,请安装 shikishiki-stream。否则控制台可能会报错:Streaming highlighter initialization failed: Error: Failed to load shiki-stream module

完整演示

基础用法(支持公式、代码块、任务列表)
cover
流式渲染

通过 enable-animate 属性实现打字机效果,模拟 AI 流式输出场景

cover

支持公式、代码块、任务列表和流式渲染。

基础用法

vue
<template>
  <Bubble :avatar="avatar" placement="start">
    <template #content>
      <MarkdownRenderer :markdown="content" />
    </template>
  </Bubble>
</template>

<script setup>
import { ref } from 'vue';
import { MarkdownRenderer } from 'x-markdown-vue';
import 'x-markdown-vue/style';

const avatar = ref('https://example.com/avatar.png');
const content = ref('**Hello** World!\n\n这是 **Markdown** 内容');
</script>

流式渲染(替代打字效果)

vue
<template>
  <Bubble :avatar="avatar" placement="start">
    <template #content>
      <MarkdownRenderer :markdown="content" :enable-animate="true" />
    </template>
  </Bubble>
</template>

<script setup>
import { ref } from 'vue';
import { MarkdownRenderer } from 'x-markdown-vue';
import 'x-markdown-vue/style';

const content = ref('');
</script>

属性

属性名
类型默认值说明
contentString''气泡内要展示的文本内容
placementString'start'气泡的位置,可选值为 'start''end',分别表示左侧和右侧。
avatarString''气泡头像的图片地址
loadingBooleanfalse是否显示加载状态。为 true 时,气泡内会显示加载状态。
shapeStringnull气泡的形状,可选值为 'round'(圆角)或 'corner'(有角)。
variantString'filled'气泡的样式变体,可选值为 'filled'(填充)、'borderless'(无边框)、'outlined'(轮廓)、'shadow'(阴影)。
noStyleBooleanfalse是否去除样式,为 true 时,将去除气泡内置 padding背景色
maxWidthString'500px'气泡内容的最大宽度。
avatar-sizeString''设置头像占位大小
avatar-gapString'12px'设置头像和气泡之间的 gap
avatar-shapeString''头像形状,可选值为 'circle'(圆形)或 'square'(方形)。
avatar-iconString''头像图标,优先级高于 avatar,支持传入图标名称,如 'user'
avatar-src-setString''设置头像图片 srcset 属性
avatar-altString''设置头像图片 alt 属性
avatar-fitString'cover'设置头像图片的 object-fit 属性,可选属性值:'cover''contain''fill''none''scale-down'

事件

事件名参数类型描述
@avatarErrorref 实例Function头像加载失败时触发

Ref 实例方法

属性名类型描述
restartFunction重新开始。
destroyFunction主动销毁 Bubble 组件。

插槽

插槽名参数类型描述
#avatar-Slot自定义头像展示内容
#header-Slot自定义气泡顶部展示内容
#content-Slot自定义气泡展示内容
#loading-Slot自定义气泡加载状态展示内容
#footer-Slot自定义气泡底部展示内容

功能特性

  1. 布局方向 - 支持左对齐(start)和右对齐(end)
  2. 内容类型 - 支持纯文本、自定义插槽内容
  3. 加载状态 - 内置加载动画,支持自定义加载内容
  4. 视觉效果 - 提供多种形状和变体(圆角/直角、填充/描边/阴影等)
  5. 灵活插槽 - 提供头像、头部、内容、底部、加载状态等插槽