u-count-to 组件需确保 start-val、end-val、duration 均为 Number 类型且 decimals 与 end-val 小数位严格对齐,否则会“一闪而过”或显示 NaN;小程序中须用 $nextTick 确保节点挂载后再启动动画,避免 target null 错误。

直接用 u-count-to 组件最省事,但参数配错就会“一闪而过”或显示 NaN——核心是 start-val、end-val、duration 三者必须同为 Number 类型,且 decimals 要和 end-val 的小数位严格对齐。
为什么 u-count-to 动画一闪而过?
常见错误是只传 end-val,漏掉 start-val 或 duration。组件默认 duration 是 300ms,数值大时根本看不出滚动过程。
-
start-val和end-val必须是Number,写成字符串如"1200"会触发NaN -
duration必须是数字,写成"500"会导致内部计算异常 - 要保留小数,
decimals得匹配end-val实际位数,比如end-val="899.6"就得设decimals="1" - 小程序里
autoplay默认为true,但数据常在onLoad后异步到达,建议先设autoplay="false",等this.$nextTick()后再调this.$refs.uCountTo.start()
小程序里 countUp.js 报 target is null 怎么办?
这不是代码写错了,是 uni-app 渲染时机和节点可用性不一致导致的。直接在 onLoad 里 new CountUp(),节点还没挂载,querySelector 返回 null。
- 用
this.$nextTick()确保 Vue 模板已更新 - H5/APP 端可直接用
document.getElementById;小程序端必须走uni.createSelectorQuery().in(this),且加.fields({ node: true }) - 拿到
res.node后不能直接传给原版countUp.js——它不认小程序虚拟节点。要么换用适配版(如countup-weapp),要么降级为手动requestAnimationFrame更新innerText
带单位(“万”、“亿”)或千分位时怎么避免抖动?
单位别塞进滚动逻辑,应在模板外用计算属性拼接;separator 和 use-easing 不是锦上添花,而是体验底线。
- 单位(如 “万”)必须放在
u-count-to外部,用计算属性处理:比如computed: { displayValue() { return Math.round(this.rawValue / 10000) + '万' } },否则缓动过程中单位会跟着闪 -
separator=","在 H5 和 App 端表现一致,但某些旧版支付宝小程序不支持千分位,需 fallback 到正则格式化:String(num).replace(/\B(?=(\d{3})+(?!\d))/g, ",") -
use-easing开启后,最后 20% 时间内速度明显放缓,用户能看清最终数值;关闭它会让动画像计数器,削弱数据可信感
财务面板嵌在 scroll-view 里就卡顿?
滚动动画卡顿大概率是因为父容器干扰了帧调度——scroll-view 启用 scroll-with-animation 或频繁触发 @scroll,会抢占 requestAnimationFrame 的执行权。
- 避免把数字滚动组件塞进
scroll-view;如果必须嵌套,禁用scroll-with-animation并减少@scroll回调中的计算量 - 数字位数多时(如带千分位),格式化逻辑不要放在
render函数里,提成方法并加防抖,否则滚动中会卡 - App 端要注意 iOS WKWebView 和 Android 渲染差异:优先用
Date.now()算进度比,而不是依赖帧数
财务面板的关键不是动效有多炫,而是数字停稳那一刻是否清晰、可信——decimals 错一位、separator 缺失、use-easing 关闭,都会让扫读效率下降,甚至引发对数据真实性的怀疑。


















