如何修改jQuery数字计数函数以添加千位分隔逗号?
给jQuery计数动画加上千位分隔符
嘿,这事儿不难!你只需要加个数字格式化的小函数,再改改动画里的文本更新逻辑就行。我给你整理好了完整的修改代码:
jQuery(document).ready(function($) { // 写个工具函数,给数字加千位分隔符 function addThousandSeparators(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } $('.counter').each(function() { var $this = $(this), // 把data-count的值转成数字,避免字符串问题 targetCount = parseInt($this.attr('data-count'), 10); // 初始化计数的时候,先把现有文本里的逗号去掉再转数字 $({currentCount: parseInt($this.text().replace(/,/g, ''), 10)}).animate({ currentCount: targetCount }, { duration: 999, easing: 'linear', step: function() { // 每次动画走一步,就把当前计数取整、格式化后显示 $this.text(addThousandSeparators(Math.floor(this.currentCount))); }, complete: function() { // 动画结束后再确认下最终值,防止精度问题 $this.text(addThousandSeparators(targetCount)); } }); }); });
为啥这么改?给你唠唠关键点:
- 格式化函数:
addThousandSeparators用正则表达式搞定千位分隔,原理是找到每三个数字的边界(不是开头),插入逗号,这个正则是处理数字千分位的常用写法。 - 初始值处理:原来的HTML里已经有
300,000,所以初始化的时候得把逗号去掉转成纯数字,不然动画起始值会是NaN或者不对。 - 步进更新:动画每一步都会调用
step函数,这里先取整(保持整数计数),再格式化后显示,这样动画过程中数字就一直带逗号了。 - 收尾兜底:有时候动画结束可能因为精度问题显示的不是最终值,所以在
complete回调里再设置一次正确的格式化数值,稳得很。
你的HTML不用改,还是原来的就行:
<span class="number counter" data-count="300000">300,000</span>
这样改完,计数动画就会从初始值平滑过渡到带千位分隔符的目标数字啦~
内容的提问来源于stack exchange,提问作者Zach Smith
相关产品推荐
相关产品推荐

