【插件:Counter-Up】JS实现自增数字动画效果
七娃博客742人阅读
最近项目中需要出现动态数字的动画效果,去git上一搜,发现好多轻量级的js插件,由于项目用的jquery,就选择了Counter-Up.js(https://github.com/bfintal/Counter-Up)。
效果如下:
使用步骤:
1.下载引入Counter-Up.js,请先引入jquery,否则,哼哼!
2.指定元素使用插件
$('.counter').countUp();
或指定动画时间
$('.counter').counterUp({ delay: 10, //延迟 time: 1000 //时间 });
大功告成!是不是很简单的一个插件,不需要懂太多原理,直接就能用!更多的可以去git查看其文档。
这个插件的原理:
1.扩展jquery方法counterUp ;
2.设置默认的时间周期和时间延迟;
3.遍历指定元素,将内容转换为数字类型,然后根据时延和周期算每次加多少,循环改变元素的值!
源代码:
/*! * jquery.counterup.js 1.0 * * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal * Released under the GPL v2 License * * Date: Nov 26, 2013 */ (function( $ ){ "use strict"; $.fn.counterUp = function( options ) { // Defaults var settings = $.extend({ 'time': 400, 'delay': 10 }, options); return this.each(function(){ // Store the object var $this = $(this); var $settings = settings; var counterUpper = function() { var nums = []; var divisions = $settings.time / $settings.delay; var num = $this.text(); var isComma = /[0-9]+,[0-9]+/.test(num); num = num.replace(/,/g, ''); var isInt = /^[0-9]+$/.test(num); var isFloat = /^[0-9]+\.[0-9]+$/.test(num); var decimalPlaces = isFloat ? (num.split('.')[1] || []).length : 0; // Generate list of incremental numbers to display for (var i = divisions; i >= 1; i--) { // Preserve as int if input was int var newNum = parseInt(num / divisions * i); // Preserve float if input was float if (isFloat) { newNum = parseFloat(num / divisions * i).toFixed(decimalPlaces); } // Preserve commas if input had commas if (isComma) { while (/(\d+)(\d{3})/.test(newNum.toString())) { newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); } } nums.unshift(newNum); } $this.data('counterup-nums', nums); $this.text('0'); // Updates the number until we're done var f = function() { $this.text($this.data('counterup-nums').shift()); if ($this.data('counterup-nums').length) { setTimeout($this.data('counterup-func'), $settings.delay); } else { delete $this.data('counterup-nums'); $this.data('counterup-nums', null); $this.data('counterup-func', null); } }; $this.data('counterup-func', f); // Start the count up setTimeout($this.data('counterup-func'), $settings.delay); }; // Perform counts when the element gets into view $this.waypoint(counterUpper, { offset: '100%', triggerOnce: true }); }); }; })( jQuery );
评论 | 0 条评论
登录之后才可留言,前往登录