Skip to content

n-count-to 数字滚动 ​

用于统计指标、金额与带单位的数字展示。数值在同一动画进度下插值,各数字列按十进制位滚动,文字、货币符号和分隔符留在原位。

平台兼容性 ​

App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序
√ √ √ × × × ×

API ​

属性 ​

参数 说明 类型 默认值
start-val 起始数值;字符串保留其中的数字和小数含义 number / string 0
end-val 目标数值;传字符串时原样保留格式字符和数字位数,例如 "$1,314.20" number / string 0
duration 从当前值到目标值的时长,毫秒;0 立即到位 number 2000
autoplay 挂载、重置和目标更新后自动开始;关闭时暂停 boolean true
decimals 数值输入保留的小数位,0–10 的整数;字符串以目标模板的小数位为准 number 0
use-easing 使用三次缓出;false 为线性 boolean true
decimal 数值输入的小数点字符;字符串保留原字符 string .
separator 数值输入的千分位分隔符,留空不分组 string
font-size 数字与格式字符的字号,px;行高须容纳字形 number 22
color 文字颜色,留空跟随主题 string
font-weight 文字字重,可传 normal、bold 或数值字符串 string normal
width 单个数字列宽度,px;0 根据数字内容自适应 number 0
height 滚轮每行容器高度,px;应大于字号,避免裁剪字形 number 32
disabled 禁用点击并降低透明度,动画继续 boolean false
highlight 按下时降低透明度 boolean false
decoration 文字装饰线 none / underline / line-through none
params 点击事件携带的业务参数 string / number 0
item-style 数字列容器行内样式 string
text-style 数字与格式字符文字行内样式;可设置字体和行高 string
separator-style 格式字符文字行内样式,在 textStyle 后应用 string
custom-class 根节点额外类名,类须定义在组件样式表内 string
custom-style 根节点行内样式 string

事件 ​

事件名 说明 回调参数
change 初始化、重置及动画值变化时触发,参数为 NCountToData NCountToData
start 开始或继续动画时触发,参数为 NCountToData NCountToData
pause 手动暂停时触发,参数为 NCountToData;页面隐藏不触发 NCountToData
reset 重置到起始值时触发,参数为 NCountToData NCountToData
finish 到达目标值时触发,每轮一次,参数为 NCountToData NCountToData
click 点击时触发,参数为 NCountToClick;disabled 拦截 NCountToClick
error 输入或尺寸无效时触发,参数为 NCountToError,停止动画 NCountToError

插槽 ​

插槽名 说明
default 整体接管内容,参数 value 当前数值、text 当前格式文字、running 是否运行

方法与边界 ​

  • start() 开始或继续;运行中重复调用不重置,已完成时开始新一轮。pause() 冻结进度,resume() 仅继续未完成的进度。reset() 从当前 startVal 重建,按 autoplay 决定是否开始。current 为 NCountToData,isRunning 可读取运行状态。
  • endVal、duration、useEasing 更新从当前实际进度续播;startVal 或 decimals 更新开始新一轮。样式和格式字符更新保留进度。autoplay=false 暂停;重新打开继续。
  • number 输入由 decimals/decimal/separator 格式化;string 输入保留目标模板(含前导零、货币、单位),不应用这三个格式属性。字符串数字连接为一个十进制数,英文句点后数字为小数,带减号为负数;不含数字时为固定文字。金额例如 "$1,314.20" 表示 1314.20;数字字符用于滚轮,其他字符原样显示。
  • 数值按所需小数位缩放后,绝对值须不超过 9007199254740991;decimals 为 0–10 的整数。时长、字号、行高和列宽须有限,时长和列宽可为零。无效输入触发 error,停止动画并保留上次有效展示;默认字号 22px / 行高 32px,使用更大字号时相应增大 height。
  • 页面/应用隐藏冻结动画且取消定时器,两者均恢复后续播;卸载清理定时器。finish 每轮一次,0 时长和相同起止值立即到位。动画时显示截取到指定小数位的文字,数字列在相邻数字间连续移动;完成时精确落在目标数字。
  • fontWeight 覆盖加粗能力;textStyle 可设置字体、line-height 与颜色;itemStyle 定制列容器,separatorStyle 定制固定格式字符。调整固定列宽须容纳最宽数字,文本字号与行高须能放入 height,防止裁剪。
  • 禁用仅阻止点击,动画继续;click 参数包含 value/text/params。highlight 用按下透明度提供反馈,root customStyle 可定制容器。统一样式使用 --n-count-to-color / disabled-opacity / pressed-opacity。

实现说明 ​

机制 参考做法 本组件做法 分歧理由
数值动画 起止值插值,支持递增、递减;目标更新从当前值续播 时间戳插值,目标变化从当前实际进度续播 调度延迟不累计;连续修改目标不回跳
数字滚轮 每个字符独立列,数字列 0–9,其他字符固定;位移加过渡 同一插值值按十进制位分解为数字列相位,0–9 后补 0 形成连续循环 保留数字滚动和格式字符,避免独立列组合出与实际插值无关的数值;统一 JS 帧循环
输入与格式 数值起止值和小数/千分位;滚轮另接受完整格式字符串 endVal 为 number 时格式化;string 时逐字符保留目标模板,数字参与滚动 输入类型表达已有能力,无额外模式开关;前后缀、货币和分隔符无需另拼装
精度 数值显示指定小数;字符串原样保留位数 数值由 decimals 控制;字符串由模板的小数位控制,拒绝不安全的数值范围 避免超出 JS 精度仍显示看似精确的金额
缓动 可关闭缓动;三次缓出或指数缓出 useEasing 使用三次缓出,关闭为线性 沿用同代实现的平滑收尾,递增和递减共用曲线
手动控制 开始、停止/暂停、暂停后续播 start/pause/resume/reset;运行中重复 start 不重新计时,完成后 start 开新一轮 暂停和重新开始语义明确,不提供重复命名的别名
生命周期 帧循环结束时取消;部分实现仅处理卸载 页面/应用隐藏冻结动画,返回继续;卸载取消调度,生命周期钩子随实例管理 展示动画无需隐藏时耗电,不在后台提前完成
点击 点击回传文字与业务参数,禁用拦截,按下高亮 click 回传当前 text/value/params;disabled 拦截,highlight 控制按下透明度 保留交互能力,禁用保持色相
字体与样式 专用数字字体;字号、颜色、字重、列宽高、装饰线 系统字体;显式样式属性、主题令牌与内部节点样式 不引入字体资产;滚轮行使用容器居中,文字不钉死高度
结构更新 位数/符号变化重建列 key 仅包含列结构与固定字符,帧更新原地改变位移 App 结构变化可靠重绘,逐帧不重建整组件

记录 · 思考 · 创作