/*! * jquery.counterup.js 2.1.0 * * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal * Released under the GPL v2 License * * Amended by Jeremy Paris, Ciro Mattia Gonano and others * * Date: Feb 24, 2017 */ (function ($) { "use strict"; $.fn.counterUp = function (options) { // Defaults var settings = $.extend({ 'time': 400, 'delay': 10, 'offset': 100, 'beginAt': 0, 'formatter': false, 'context': 'window', callback: function () { } }, options), s; return this.each(function () { // Store the object var $this = $(this), counter = { time: $(this).data('counterup-time') || settings.time, delay: $(this).data('counterup-delay') || settings.delay, offset: $(this).data('counterup-offset') || settings.offset, beginAt: $(this).data('counterup-beginat') || settings.beginAt, context: $(this).data('counterup-context') || settings.context }; var counterUpper = function () { var nums = []; var divisions = counter.time / counter.delay; var num = $this.attr('data-num') ? $this.attr('data-num') : $this.text(); var isComma = /[0-9]+,[0-9]+/.test(num); num = num.replace(/,/g, ''); var decimalPlaces = (num.split('.')[1] || []).length; if (counter.beginAt > num) counter.beginAt = num; var isTime = /[0-9]+:[0-9]+:[0-9]+/.test(num); // Convert time to total seconds if (isTime) { var times = num.split(':'), m = 1; s = 0; while (times.length > 0) { s += m * parseInt(times.pop(), 10); m *= 60; } } // Generate list of incremental numbers to display for (var i = divisions; i >= counter.beginAt / num * divisions; i--) { var newNum = parseFloat(num / divisions * i).toFixed(decimalPlaces); // Add incremental seconds and convert back to time if (isTime) { newNum = parseInt(s / divisions * i); var hours = parseInt(newNum / 3600) % 24; var minutes = parseInt(newNum / 60) % 60; var seconds = parseInt(newNum % 60, 10); newNum = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds); } // Preserve commas if input had commas if (isComma) { while (/(\d+)(\d{3})/.test(newNum.toString())) { newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); } } if (settings.formatter) { newNum = settings.formatter.call(this, newNum); } nums.unshift(newNum); } $this.data('counterup-nums', nums); $this.text(counter.beginAt); // Updates the number until we're done var f = function () { if (!$this.data('counterup-nums')) { settings.callback.call(this); return; } $this.html($this.data('counterup-nums').shift()); if ($this.data('counterup-nums').length) { setTimeout($this.data('counterup-func'), counter.delay); } else { $this.data('counterup-nums', null); $this.data('counterup-func', null); settings.callback.call(this); } }; $this.data('counterup-func', f); // Start the count up setTimeout($this.data('counterup-func'), counter.delay); }; // Perform counts when the element gets into view $this.waypoint(function (direction) { counterUpper(); this.destroy(); //-- Waypoint 3.0 version of triggerOnce }, {offset: counter.offset + "%", context: counter.context}); }); }; })(jQuery);