137 lines
No EOL
3.3 KiB
JavaScript
137 lines
No EOL
3.3 KiB
JavaScript
/*
|
|
* jQuery Numerator Plugin 0.2.1
|
|
* https://github.com/garethdn/jquery-numerator
|
|
*
|
|
* Copyright 2015, Gareth Nolan
|
|
* http://ie.linkedin.com/in/garethnolan/
|
|
|
|
* Based on jQuery Boilerplate by Zeno Rocha with the help of Addy Osmani
|
|
* http://jqueryboilerplate.com
|
|
*
|
|
* Licensed under the MIT license:
|
|
* http://www.opensource.org/licenses/MIT
|
|
*/
|
|
|
|
;(function (factory) {
|
|
'use strict';
|
|
if (typeof define === 'function' && define.amd) {
|
|
// AMD is used - Register as an anonymous module.
|
|
define(['jquery'], factory);
|
|
} else if (typeof exports === 'object') {
|
|
factory(require('jquery'));
|
|
} else {
|
|
// Neither AMD nor CommonJS used. Use global variables.
|
|
if (typeof jQuery === 'undefined') {
|
|
throw 'jquery-numerator requires jQuery to be loaded first';
|
|
}
|
|
factory(jQuery);
|
|
}
|
|
}(function ($) {
|
|
|
|
var pluginName = "numerator",
|
|
defaults = {
|
|
easing: 'swing',
|
|
duration: 500,
|
|
delimiter: undefined,
|
|
rounding: 0,
|
|
toValue: undefined,
|
|
fromValue: undefined,
|
|
queue: false,
|
|
onStart: function(){},
|
|
onStep: function(){},
|
|
onProgress: function(){},
|
|
onComplete: function(){}
|
|
};
|
|
|
|
function Plugin ( element, options ) {
|
|
this.element = element;
|
|
this.settings = $.extend( {}, defaults, options );
|
|
this._defaults = defaults;
|
|
this._name = pluginName;
|
|
this.init();
|
|
}
|
|
|
|
Plugin.prototype = {
|
|
|
|
init: function () {
|
|
this.parseElement();
|
|
this.setValue();
|
|
},
|
|
|
|
parseElement: function () {
|
|
var elText = $.trim($(this.element).text());
|
|
|
|
this.settings.fromValue = this.settings.fromValue || this.format(elText);
|
|
},
|
|
|
|
setValue: function() {
|
|
var self = this;
|
|
|
|
$({value: self.settings.fromValue}).animate({value: self.settings.toValue}, {
|
|
|
|
duration: parseInt(self.settings.duration, 10),
|
|
|
|
easing: self.settings.easing,
|
|
|
|
start: self.settings.onStart,
|
|
|
|
step: function(now, fx) {
|
|
$(self.element).text(self.format(now));
|
|
// accepts two params - (now, fx)
|
|
self.settings.onStep(now, fx);
|
|
},
|
|
|
|
// accepts three params - (animation object, progress ratio, time remaining(ms))
|
|
progress: self.settings.onProgress,
|
|
|
|
complete: self.settings.onComplete
|
|
});
|
|
},
|
|
|
|
format: function(value){
|
|
var self = this;
|
|
|
|
if ( parseInt(this.settings.rounding ) < 1) {
|
|
value = parseInt(value, 10);
|
|
} else {
|
|
value = parseFloat(value).toFixed( parseInt(this.settings.rounding) );
|
|
}
|
|
|
|
if (self.settings.delimiter) {
|
|
return this.delimit(value)
|
|
} else {
|
|
return value;
|
|
}
|
|
},
|
|
|
|
// TODO: Add comments to this function
|
|
delimit: function(value){
|
|
var self = this;
|
|
|
|
value = value.toString();
|
|
|
|
if (self.settings.rounding && parseInt(self.settings.rounding, 10) > 0) {
|
|
var decimals = value.substring( (value.length - (self.settings.rounding + 1)), value.length ),
|
|
wholeValue = value.substring( 0, (value.length - (self.settings.rounding + 1)));
|
|
|
|
return self.addDelimiter(wholeValue) + decimals;
|
|
} else {
|
|
return self.addDelimiter(value);
|
|
}
|
|
},
|
|
|
|
addDelimiter: function(value){
|
|
return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.settings.delimiter);
|
|
}
|
|
};
|
|
|
|
$.fn[ pluginName ] = function ( options ) {
|
|
return this.each(function() {
|
|
if ( $.data( this, "plugin_" + pluginName ) ) {
|
|
$.data(this, 'plugin_' + pluginName, null);
|
|
}
|
|
$.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
|
|
});
|
|
};
|
|
|
|
})); |