You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.0 KiB
116 lines
4.0 KiB
/*!
|
|
* jquery.counterup.js 2.0.5
|
|
*
|
|
* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
|
|
* Released under the GPL v2 License
|
|
*
|
|
* Amended by Jeremy Paris, Ciro Mattia Gonano and others
|
|
*
|
|
* Date: Jun 21, 2016
|
|
*/
|
|
(function ($) {
|
|
"use strict";
|
|
|
|
$.fn.counterUp = function (options) {
|
|
|
|
// Defaults
|
|
var settings = $.extend({
|
|
'time': 400,
|
|
'delay': 10,
|
|
'formatter': false,
|
|
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
|
|
};
|
|
|
|
var counterUpper = function () {
|
|
var nums = [];
|
|
var divisions = counter.time / counter.delay;
|
|
var num = $this.text();
|
|
var isComma = /[0-9]+,[0-9]+/.test(num);
|
|
num = num.replace(/,/g, '');
|
|
var decimalPlaces = (num.split('.')[1] || []).length;
|
|
|
|
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 >= 1; 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('0');
|
|
|
|
// 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: '100%'});
|
|
});
|
|
|
|
};
|
|
|
|
})(jQuery); |