跳转到内容

数值动画 number-animation

数据展示组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

挂载即从 from 走到 to,三个尺寸档只改字号;不写 size 就跟着上下文的字号走

000

小数位与千位分隔

precision 定小数位,separator 定分隔符;不给分隔符就不分隔,插什么符号是地区习惯

整数、不分隔:0

整数、逗号分隔:0

两位小数、空格分隔: 0.00

负数也认:0.0

缓动与时长

duration 定跑多久,easing 定快慢怎么分配;同一段距离四档并排跑,差别一眼可见

linear: 0

ease-in: 0

ease-out: 0

ease-in-out: 0

跟着数据走

改 to 就从当前数字接着走向新终点,跑完停下之后再改也照样重新跑;active 翻假即停在当前值

0

产物

自定义元素<xh-number-animation>
Vue 组件XhNumberAnimation
状态机numberAnimationMachine
皮肤@xihan-ui/styles/number-animation.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="number-animation"root

Props

属性类型必填说明
fromnumber起点,缺省 0。改写它会把显示值当场落到新起点,并从那里重跑这一轮。
tonumber终点,缺省 0。改写它从当前显示值接着走向新终点,不跳回起点。
durationnumber时长毫秒,缺省 1000;<=0 即一步到位。
easingNumberAnimationEasing缓动:linear / ease-in / ease-out / ease-in-out,缺省 linear。
precisionnumber小数位,缺省 0。夹进 [0, 20]。
separatorstring千位分隔符,缺省不分隔。
activeboolean是否在跑,缺省 true。翻假即停在当前值,翻真从当前值继续走向终点。
sizeSize尺寸:sm / md / lg,只落成 root 的 data-size。
toneTone语气:brand / neutral / success / warning / danger / info,只落成 root 的 data-tone。
liveNumberAnimationLive读屏播报档位,缺省 off。
onFinish(details: NumberAnimationFinishDetails) => void走到终点时通知一次。中途被停掉不通知。

状态机

状态idle · running

事件RUN.START · RUN.STOP · RUN.SYNC · FRAME

判据isSettled · isActive

connect API

connect 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
phaseNumberAnimationPhase
valuenumber当前数值(未格式化)。
textstring当前数值按 precision 与 separator 铺好的文本,也就是根里该显示的字。
runningboolean是否还在跑。
getRootProps() => T['element']

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License