| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- (function($) {
 
-   var NumberProgressBar = function(element, options) {
 
-     var settings = $.extend ({
 
-       duration: 10000,
 
-       percentage: 0,
 
-       shownQuery: '.number-pb-shown',
 
-       numQuery: '.number-pb-num',
 
-     }, options || {});
 
-     this.duration = settings.duration;
 
-     this.last_percentage = -1;
 
-     this.percentage = (settings.percentage >= 0 && settings.percentage <= 100) ? settings.percentage : 0;
 
-     this.$element = $(element);
 
-     this.width = this.$element.width();
 
-     this.$shownBar = this.$element.find(settings.shownQuery);
 
-     this.$num = this.$element.find(settings.numQuery);
 
- 		this.$progressFunction = settings.progressFunction;
 
-     this.reach(this.percentage);
 
-   }
 
-   NumberProgressBar.prototype.reach = function(percentage) {
 
-     if (this.last_percentage < 0) {
 
-       this.last_percentage = 0;
 
-     } else {
 
-       this.last_percentage = this.percentage;
 
-     }
 
-     if (percentage < 0) {
 
-       this.percentage = 0;
 
-     } else if (percentage > 100) {
 
-       this.percentage = 100;
 
-     } else {
 
-       this.percentage = percentage;
 
-     }
 
-     //console.log('reach: ', this.last_percentage, this.percentage, this.calDuration());
 
-     this.moveShown();
 
-     this.moveNum();
 
-   }
 
-   NumberProgressBar.prototype.calDuration = function() {
 
-     return this.duration * Math.abs(this.percentage - this.last_percentage) / 100.0;
 
-   }
 
-   NumberProgressBar.prototype.moveShown = function() {
 
-     //console.log('moveShown: ', this.percentage);
 
-     this.$shownBar.velocity({
 
-       width: this.percentage + '%'
 
-     }, {
 
-       duration: this.calDuration()
 
-     })
 
-   }
 
-   NumberProgressBar.prototype.moveNum = function() {
 
-     //console.log('moveNum: ', this.percentage);
 
-     var self = this;
 
-     var left = this.width * this.percentage / 100.0;
 
-     var numWidth = this.$num.width();
 
-     if (numWidth + left > this.width) {
 
-       var percentage = (this.width - numWidth) / this.width * 100.0;
 
-     } else {
 
-       var percentage = this.percentage;
 
-     }
 
-     this.$num.velocity({
 
-       left: percentage + '%'
 
-     }, {
 
-       duration: this.calDuration()
 
-     })
 
-     // number
 
-     $({num: parseInt(this.$num.text())}).animate({
 
-       num: this.percentage
 
-     }, {
 
-       queue: true,
 
-       duration: self.calDuration(),
 
-       step: function() {
 
-         self.$num.text(Math.ceil(this.num) + '%');
 
- 				self.$progressFunction(this.num)
 
-       },
 
-       complete: function() {
 
-         self.$num.text(self.percentage + '%');
 
- 				self.$progressFunction(this.num)
 
-       }
 
-     })
 
-   }
 
-   $.fn.NumberProgressBar = function(options) {
 
-     return this.each(function () {
 
-       var element = $(this);
 
-       if (element.data('number-pb')) return;
 
-       element.data('number-pb', new NumberProgressBar(this, options));
 
-     })
 
-   }
 
-   $.fn.reach = function(percentage) {
 
-     return this.each(function() {
 
-       var element = $(this);
 
-       var progressbar = element.data('number-pb');
 
-       if (!progressbar) return;
 
-       if (percentage < 0 || percentage > 100 || percentage == progressbar.percentage) return;
 
-       progressbar.reach(percentage);
 
-     })
 
-   }
 
- })(jQuery);
 
 
  |