Skip to content

BubbleList 气泡列表 🍅

📌 注意

1.1.6 版本 继承打字器 雾化 效果。新增 滚动底部按钮,仿 豆包🔥。新增 鼠标悬停展示滚动条,增强交互体验。请及时更新尝试

🐵 此温馨提示更新时间:2025-04-13

💔 危险

1.0.81 版本 ,以及更早版本。BubbleList 组件的自动滚动逻辑,会和内置的打字器组件结合使用,可能会导致在自定义 content 插槽时, 自动滚动 失效`。且存在一定的性能问题。

上述问题在新版本中已修复,请及时升级至最新版本,以获得更好的体验。

此警告更新时间:2025-04-06

💡 提示

另: 新版本的自动滚动,在 list 长度变化时,自动滚动。但是 向上滚动滚动条后,需要手动调用 scrollToBottom 方法,以再次实现自动滚动。或者 滚动条滚动到底部后,会重新触发自动滚动。

和原来逻辑一样, 升级无需任何心理负担。

介绍

BubbleList 依赖于 Bubble 组件,用于展示一组对话气泡列表。该组件支持设置 列表最大高度,具备 自动滚动 功能。同时,它还提供了多种 控制滚动 的方法,使用者 可以轻松调用,性能强大,无需任何开发心理负担。

代码演示

基本使用

cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover

预设样式的气泡列表,通过一个消息简单的 Array ,可以快速创建一个聊天记录。

我们所有的消息操作,只需要维护这个数组就行了,包括 流式消息 的设置。这里没有使用接口流式操作。在下面有

你还可以通过属性 max-height 来控制列表的最大高度。

自定义列表

动态设置内容
自定义 loading
avatar
Element Plus X 🍧
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
avatar
🧁 用户
哈哈哈,让我试试
avatar
Element Plus X 🍧
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
avatar
🧁 用户
哈哈哈,让我试试
avatar
Element Plus X 🍧
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~

🍋 通过 #avatar#header#content#loading#footer 插槽,可以更灵活的控制气泡列表的渲染

自动滚动、指定滚动位置

cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试

🍑 你可以轻松使用 bubbleListRef 组件实例方法,控制 滚动到指定索引。

🍒 组件实例方法

  • scrollToTop():滚动到顶部
  • scrollToBottom():滚动到底部
  • scrollToBubble(index: number):滚动到指定索引

返回顶部按钮

滚动条显示:
鼠标悬停展示
底部按钮加载状态:
true
底部按钮颜色:
底部按钮位距离底部:
距离左边:
底部按钮尺寸:
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
cover
💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~💖 感谢使用 Element Plus X ! 你的支持,是我们开源的最强动力 ~
cover
哈哈哈,让我试试
  • 内置回到底部按钮,仿 豆包
  • 鼠标悬停时,会出现滚动条
  • 和内置自动滚动不冲突,请放心使用

💌 消息

滚动条控制属性

  • alwaysShowScrollbar 属性控制是否一直显示滚动条,默认为 false

底部按钮定制化属性

  • 你可以通过 backButtonThreshold 属性来设置回到底部按钮的阈值,默认为 80,即当滚动条滚动到距离底部 80px 时,才会出现回到底部按钮。
  • showBackButton 属性控制是否显示回到底部按钮,默认为 true
  • btnLoading 属性控制是否显示加载中的状态,默认为 true
  • btnColor 属性控制回到底部按钮的颜色,默认为 #409EFF
  • backButtonPosition 属性控制回到底部按钮的位置,默认为 { bottom: '20px', left: 'calc(50% - 19px)' } 可以用 % 来控制,如 { bottom: '10%', left: 'calc(50% - 19px)' }
  • btnIconSize 属性控制回到底部按钮的图标大小,默认为 24

滚动完成事件

📌 注意

极特殊情况才用的到,在流式输出中不适用,会快速触发打字结束事件。

trigger-indices:

🍉该属性使用场景很少,请酌情使用,更细致的控制你的气泡在列表中的 完成事件

你可以通过 @complete 事件,触发列表,每一个打字中的 Bubble 气泡组件的 完成打字 的回调事件。 @complete 返回两个参数,instance 是 打字器组件实例 和 indexBubbleListItem 的索引。

💡 提示

  • @complete 事件仅会触发 typing 属性为 trueBubble 组件 回调事件。
  • 如果你给列表配置了多个气泡的 typing 属性,列表默认只处理最后一个 typingtrue 的气泡的 @complete 事件。

💌 消息

  • 如果你需要处理多个 typingtrue 的气泡完成回调事件,你可以通过 triggerIndices 属性来指定需要处理的气泡的索引。它是一个 'only-last' | 'all' | number[] 类型。
  • 默认为 'only-last',只执行 最后一个 typingtrue 的气泡的 @complete 事件。
  • 'all' 表示执行所有 typingtrue 的气泡的 @complete 事件。@complete 将会被执行多次。
  • number[] 设置你想要监听的 BubbleListItem 的索引。组件会自动过滤 无效的索引,并输出 console.warn

属性

属性名类型
是否必填
默认值说明
listArray包含气泡信息的数组,每个元素为一个对象,包含 contentplacementloadingshapevariantisMarkdowntypingBubble 属性,用于配置每个气泡的显示内容和样式。
maxHeightString'500px'气泡列表容器的最大高度,超过该高度会出现垂直滚动条。
alwaysShowScrollbarBooleanfalse是否一直显示滚动条,默认为 false
backButtonThresholdNumber80滚动条显示阈值,当滚动条距离底部小于该值时,会显示滚动条。
showBackButtonBooleantrue是否显示返回顶部按钮,默认为 true
backButtonPosition{ bottom: '20px', left: 'calc(50% - 19px)' }{ bottom: '20px', left: 'calc(50% - 19px)' }返回顶部按钮的位置, 默认底部居中展示。
btnLoadingBooleantrue是否开启返回顶部按钮 loading 状态,默认为 true
btnColorString'#409EFF'返回顶部按钮的颜色,默认为 '#409EFF'
btnIconSizeNumber24返回顶部按钮的图标大小,默认为 24px。
triggerIndices'only-last' | 'all' | number[]'only-last'触发滚动完成事件的气泡 索引数组,默认为 'only-last'

事件

事件名参数类型描述
@complete(instance, index)Function当某个气泡的打字效果完成时触发的事件。

Ref 实例方法

属性名类型描述
scrollToTopFunction滚动到顶部。
scrollToBottomFunction滚动到底部。
scrollToBubbleFunction滚动到指定气泡索引位置。

插槽

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

功能特性

  1. 智能滚动 - 自动跟踪最新消息位置
  2. 深度定制 - 完整的气泡组件插槽透传
  3. 多种滚动方式 - 滚动到顶部、底部、指定位置
  4. 打字效果 - 支持打字效果
  5. 多种样式 - 支持多种样式,如圆形、方形等