之前做过一些数据可视化项目的时候,感觉数字动态效果挺好玩的,就想着分享一些快乐。
可以先看一下效果图:
其实内容也很简单,一个html文件,一个js文件。通过定义速度、显示数字等,来初始化一个数字动态加载的方法。
html
data-top中为要显示的数字,data-speed中配置加载这个数字完成需要的时间,单位为ms。
<div class="number-box"> <span class="timer counter" data-to="600.88" data-speed="3500">0</span> <span class="timer math" data-to="123456" data-speed="3500">0</span> </div> <style> .number-box { width: 70%; margin:50px auto; box-shadow: rgba(0,0,0,.6) 0 0 8px; padding: 60px; display: flex; border-radius: 10px; background: #071435; color: #b52eef; } .number-box::after { content: ''; display: block; clear: both; } .number-box span { font-size: 88px; font-weight: bold; text-align: center; flex: 1; } </style>
js文件部分代码
//设置当前元素的选项 var settings = $.extend({}, $.fn.countTo.defaults, { from: $(this).data('from'), to: $(this).data('to'), speed: $(this).data('speed'), refreshInterval: $(this).data('refresh-interval'), decimals: $(this).data('decimals') }, options); // 定义更新值的次数,以及每次更新时值的增量 var loops = Math.ceil(settings.speed / settings.refreshInterval), increment = (settings.to - settings.from) / loops; // 定义每次更新都会更改的引用和变量 var self = this, $self = $(this), loopCount = 0, value = settings.from, data = $self.data('countTo') || {}; $self.data('countTo', data); // 设置其中某项数字小数点后显示个数 $('.counter').data('countToOptions', { formatter: function (value, options) { return value.toFixed(2); //小数点后显示1个 } }); //千位数显示"," $('.math').data('countToOptions', { formatter: function (value, options) { return value.toFixed(options.decimals).replace(/\B(?=(?:\d{3})+(?!\d))/g, ','); } });
最后是在页面加载完成的时候调用即可
$(window).ready(function () { $('.timer').each(count); function count(options) { var $this = $(this); options = $.extend({}, options || {}, $this.data('countToOptions') || {}); $this.countTo(options); } $(".math").removeClass("timer"); })