$.fn.countTo = function(options) {
	options = options || {};
	return $(this).each(function() {
		var settings = $.extend({},
		$.fn.countTo.defaults, {
			from: $(this).data('from'),
			to: $(this).data('to'),
			speed: $(this).data('speed'),
			refreshInterval: $(this).data('refresh-interval'),
			decimals: $(this).data('decimals')
		},
		options);
		var loops = Math.ceil(settings.speed / settings.refreshInterval),
		increment = (settings.to - settings.from) / loops;
		var self = this,
		$self = $(this),
		loopCount = 0,
		value = settings.from,
		data = $self.data('countTo') || {};
		$self.data('countTo', data);
		if (data.interval) {
			clearInterval(data.interval);
		}
		data.interval = setInterval(updateTimer, settings.refreshInterval);
		render(value);
		function updateTimer() {
			value += increment;
			loopCount++;
			render(value);
			if (typeof(settings.onUpdate) == 'function') {
				settings.onUpdate.call(self, value);
			}
			if (loopCount >= loops) {
				$self.removeData('countTo');
				clearInterval(data.interval);
				value = settings.to;
				if (typeof(settings.onComplete) == 'function') {
					settings.onComplete.call(self, value);
				}
			}
		}
		function render(value) {
			var formattedValue = settings.formatter.call(self, value, settings);
			//console.log(self, value, settings)
			$self.html(formattedValue);
		}
	});
};
$.fn.countTo.defaults = {
	from: 0,
	to: 0,
	speed: 1000,
	refreshInterval: 100,
	decimals: 0,
	formatter: formatter,
	onUpdate: null,
	onComplete: null
};
function formatter(value, settings) {
	return value.toFixed(settings.decimals);
}
$('.count-number').each(function() {  
	var $this = $(this);  
	count.call($this);  // 使用.call()确保this指向当前元素  
});

function count() {  
    var $this = $(this);  
    var options = $.extend({},  
        $.fn.countTo.defaults,  
        $this.data(),  // 使用$this.data()来获取所有data-*属性  
        $this.data('countToOptions') || {}  // 覆盖默认选项和data-*属性  
    );  
    $this.countTo(options);  
}