更新记录

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 支持 charwordlineword 会合并连续英文、数字和空白,中文与 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 charwordline
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 确认前的乱码刷新次数。

事件与方法

事件:startprogresspauseresumewaitingcompleteskipreverseappendclear

progress 回传 { visible, total, progress, direction }startresumecompleteskipreverse 回传当前数量、总数和方向;pausewaiting 回传当前数量和总数;append 回传 chunk、累计 text 和总数;clear 不带事件数据。

实例方法:

方法 说明
play() 从当前边界开始播放。
pause() / resume() 暂停或继续。
restart() reverse 初始方向重播。
skip() 立即到达当前方向的终点。
reverse() 切换正放/倒放并继续。
setSpeed(ms) 运行时修改速度。
append(chunk) 追加流式片段并自动继续。
finishStream() 标记本次流结束。
clear() 清空文字并停止。

字符处理与性能

字符模式会保留 UTF-16 代理对、组合音标、肤色修饰、国旗和 ZWJ 家庭/职业 emoji,避免把一个可见符号拆成半个字符。组件只挂载已经显示的 token;长文建议使用 wordline,并按消息/段落拆分实例,避免一次创建数千个文字节点。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无需系统权限。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

组件仅在本地处理业务传入的文字,不采集、不上传任何用户数据。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无广告、无广告 SDK、无引流内容。

暂无用户评论。