TextTransformer 文本变换
逐字形变或整串交叉淡化的短文本过渡
用法
基础
文字颜色随值变化时写在根节点上,fade 的旧层会带着旧颜色淡出。
示例加载中...
morph 与 fade
默认 morph 逐字形变、数字按位值滚动;fade 是整串 blur 交叉淡化,blurPx 只在 fade 下生效。
示例加载中...
与 AutoSizer 搭配
放进 TxAutoSizer 并用 action(() => …) 包住切换,宽高随文本平滑过渡;wrap=false 时溢出部分被裁剪。
示例加载中...
长文本 / 章节切换
wrap 让多行文本按 pre-line 换行,并强制走 fade。
示例加载中...
标题与副标题
示例加载中...
状态文本
示例加载中...
最佳实践
- 用于标签、标题、徽标与偶发状态变化,不要用于逐字流式输出或每帧变化的计数器。
- 只要形变时直接用
TxTextMorph,它另有弹簧、numbers、locale与cursorIndex。 - 与
TxAutoSizer组合时让两者时长一致;morph自己动画宽高,多数场景不需要外层 sizer。 - 按钮、徽标等紧凑场景保持
wrap=false,段落或章节切换才开wrap。 - 插槽内容保持轻量,并只依赖传入的
text:fade过渡期间新旧两层各渲染一份。
API 参考
属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text | string | number | - | 当前值,经 String(...) 归一化。 |
mode | 'morph' | 'fade' | morph | morph 逐字形变;fade 整串 blur 交叉淡化。 |
durationMs | number | 240 | 过渡时长(ms);fade 下也决定旧层何时移除。 |
blurPx | number | 8 | 交叉淡化的模糊距离,仅 fade 生效。 |
tag | string | span | 根节点标签。 |
wrap | boolean | false | 多行文本按 pre-line 换行,并强制 fade。 |
插槽
| 插槽名 | 参数 | 说明 |
|---|---|---|
default | { text: string } | 当前层与旧层共用的文本渲染器;使用时强制 fade。 |
概述
- 用了默认插槽或开了
wrap时忽略mode,强制走fade:引擎只能形变纯文本,且只在单行上度量。 - 根节点带
aria-live="polite";morph下完整值在视觉隐藏的[tx-morph-sr]节点里,fade下旧层aria-hidden,只宣告当前文本。 fade且wrap=false时单行省略;morph下根节点overflow: visible,离场段不被截断,因此不做省略。fade下新层先落在透明加模糊的准备态,强制提交一次样式后下一帧开始过渡;旧层在durationMs + 34ms后移除。- 新一轮变化会取消上一轮的 timer 与动画帧,旧过渡不会误删当前层。
- 减少动态效果时两层都不过渡,新文字直接替换。
技术实现
morph渲染 TextMorph 文本形变 的TxTextMorph;fade渲染新旧两层,由--tx-tt-duration与--tx-tt-blur驱动 CSS 过渡。- 源码:
packages/tuffex/packages/components/src/text-transformer/。
查看源码
packages/tuffex/packages/components/src/text-transformer/index.ts