更新记录
1.0.0(2026-07-23)
- 新增 uni-app Vue3 与 uni-app x 双组件实现。
- 支持逐字、逐词、逐行以及打字机、乱码、渐入、模糊、弹跳、波浪、抖动、变色效果。
- 支持流式文本追加、暂停、继续、重播、跳过、倒放、循环和动态速度控制。
- 支持 Markdown 分段、常用行内标记、关键词高亮与下划线动画。
- 支持中文、英文、数字、组合字符和 ZWJ emoji 安全切分。
平台兼容性
uni-app(3.8.0)
| Vue2 | Vue3 | Vue3插件版本 | Chrome | Chrome插件版本 | Safari | Safari插件版本 | app-vue | app-vue插件版本 | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | - | 5.0 | 1.0.0 | 12 | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(3.8.0)
| Chrome | Chrome插件版本 | Safari | Safari插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
kongbai-text-motion
适用于流式文本、欢迎语、剧情字幕和内容阅读的文字交互动画组件。插件同时提供 .uvue 与 .vue 组件,共享 UTS 文本解析模块,不依赖原生 SDK、网络请求或第三方 UI 库。
平台
- uni-app x:Web、Android App、iOS App
- uni-app Vue3:H5、Android App、iOS App
- 不支持 uni-app Vue2、nvue 和小程序
uni-app x App 动画依赖 HBuilderX 4.53+ 的 UniElement.animate();Web 与 uni-app Vue3 使用 CSS 关键帧。
功能
- 支持逐字、逐词、逐行三种播放粒度。
- 提供打字机、乱码、渐入、模糊、弹跳、波浪、抖动、变色八种效果。
- 支持流式文本追加、暂停、继续、重播、倒放、跳过、循环和动态调速。
- 支持轻量 Markdown 分段、关键词高亮、背景色和下划线。
- 支持组合音标、肤色修饰、国旗和 ZWJ emoji 的完整显示。
基础使用
安装到项目的 uni_modules 后,通过 easycom 直接使用:
<kongbai-text-motion
text="你好,欢迎使用文字动画 👨💻✨"
effect="bounce"
unit="char"
:speed="52"
:keywords="['文字动画']"
:underline-keywords="true"
/>
uni-app x 与 uni-app Vue3 组件的控制逻辑均由 shared/useTextMotion.uts 提供,组件脚本统一使用 <script setup lang="uts">。两个版本的属性、事件和实例方法保持一致。
流式文本
可以通过 text 属性持续传入完整累计文本,也可以直接调用实例的 append()。流结束后调用 finishStream(),组件才会发出最终 complete 事件。
<template>
<kongbai-text-motion ref="motionRef" stream effect="typewriter" :speed="30" />
</template>
<script setup>
import { ref } from 'vue'
const motionRef = ref(null)
function onMessageChunk(chunk) {
motionRef.value.append(chunk)
}
function onMessageEnd() {
motionRef.value.finishStream()
}
</script>
stream 模式显示完当前内容后会进入 waiting 状态,不会提前触发 complete。下一段内容到达时自动继续。
动画与粒度
effect |
效果 |
|---|---|
typewriter |
经典打字机 |
scramble |
乱码解码 |
fade |
渐入上浮 |
blur |
模糊聚焦,App 自动使用缩放渐入降级 |
bounce |
弹跳入场 |
wave |
波浪入场 |
shake |
抖动入场 |
color |
按 colors 调色板逐段变色 |
unit 支持 char、word、line。word 会合并连续英文、数字和空白,中文与 emoji 按完整字素推进;line 按 Markdown/普通文本行推进。
Markdown 分段
设置 markdown 后,组件会识别以下内容并按块播放,不使用 v-html:
- 一级到三级标题
- 无序列表、数字列表
- 引用、分隔线、围栏代码块
**粗体**、*斜体*、行内代码和链接文本
<kongbai-text-motion
:text="markdownText"
markdown
unit="word"
effect="fade"
/>
这是轻量展示解析器,不负责表格、图片、任务列表或 HTML 标签。复杂 Markdown 可先用业务侧解析器拆成多个组件实例。
关键词样式
简单场景使用 keywords,高级场景传入 keywordRules:
const keywordRules = [
{ keyword: '重点', color: '#175CD3', backgroundColor: '#D1E9FF', underline: true },
{ keyword: '重要', color: '#B42318', backgroundColor: '#FEE4E2' }
]
关键词跨多个字符或词时,命中的动画 token 会依次显示颜色、背景与下划线,形成随文字展开的高亮动画。
属性
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text |
string |
'' |
要展示的完整文本;流式模式可持续追加。 |
effect |
string |
typewriter |
动画类型。 |
unit |
string |
char |
char、word 或 line。 |
speed |
number |
48 |
每个 token 的间隔,16 - 2000ms。 |
autoplay |
boolean |
true |
初始化或非流式文本变化后自动播放。 |
loop |
boolean |
false |
播放完成后循环;流式正向播放不循环。 |
loopDelay |
number |
600 |
循环间隔,单位 ms。 |
reverse |
boolean |
false |
初始化时从完整文本向前删除。 |
stream |
boolean |
false |
流式文本等待模式。 |
markdown |
boolean |
false |
开启轻量 Markdown 分段。 |
cursor |
boolean |
true |
是否显示光标。 |
cursorChar |
string |
\| |
光标字符。 |
cursorColor |
string |
#2563EB |
光标颜色。 |
textColor |
string |
#182230 |
默认文字颜色。 |
fontSize |
number |
18 |
基础字号,单位 px。 |
lineHeight |
number |
自动 | 行高,单位 px。 |
keywords |
string[] |
[] |
使用统一样式的关键词。 |
keywordRules |
KeywordRule[] |
[] |
每个关键词的独立样式。 |
highlightColor |
string |
#1D4ED8 |
keywords 的文字与下划线颜色。 |
highlightBackground |
string |
#DBEAFE |
keywords 的背景色。 |
underlineKeywords |
boolean |
false |
为 keywords 添加随播放出现的下划线。 |
colors |
string[] |
内置五色 | color 效果的调色板。 |
scrambleChars |
string |
英数符号 | 乱码效果字符池。 |
scrambleSteps |
number |
3 |
每个 token 确认前的乱码刷新次数。 |
事件与方法
事件:start、progress、pause、resume、waiting、complete、skip、reverse、append、clear。
progress 回传 { visible, total, progress, direction };start、resume、complete、skip、reverse 回传当前数量、总数和方向;pause、waiting 回传当前数量和总数;append 回传 chunk、累计 text 和总数;clear 不带事件数据。
实例方法:
| 方法 | 说明 |
|---|---|
play() |
从当前边界开始播放。 |
pause() / resume() |
暂停或继续。 |
restart() |
按 reverse 初始方向重播。 |
skip() |
立即到达当前方向的终点。 |
reverse() |
切换正放/倒放并继续。 |
setSpeed(ms) |
运行时修改速度。 |
append(chunk) |
追加流式片段并自动继续。 |
finishStream() |
标记本次流结束。 |
clear() |
清空文字并停止。 |
字符处理与性能
字符模式会保留 UTF-16 代理对、组合音标、肤色修饰、国旗和 ZWJ 家庭/职业 emoji,避免把一个可见符号拆成半个字符。组件只挂载已经显示的 token;长文建议使用 word 或 line,并按消息/段落拆分实例,避免一次创建数千个文字节点。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 9
赞赏 0
下载 12450628
赞赏 1935
赞赏
京公网安备:11010802035340号