jQuery animated number counter from zero to value jQuery animated number counter from zero to value jquery jquery

jQuery animated number counter from zero to value


Your thisdoesn't refer to the element in the step callback, instead you want to keep a reference to it at the beginning of your function (wrapped in $thisin my example):

$('.Count').each(function () {  var $this = $(this);  jQuery({ Counter: 0 }).animate({ Counter: $this.text() }, {    duration: 1000,    easing: 'swing',    step: function () {      $this.text(Math.ceil(this.Counter));    }  });});

Update: If you want to display decimal numbers, then instead of rounding the value with Math.ceil you can round up to 2 decimals for instance with value.toFixed(2):

step: function () {  $this.text(this.Counter.toFixed(2));}


this inside the step callback isn't the element but the object passed to animate()

$('.Count').each(function (_, self) {    jQuery({        Counter: 0    }).animate({        Counter: $(self).text()    }, {        duration: 1000,        easing: 'swing',        step: function () {            $(self).text(Math.ceil(this.Counter));        }    });});

Another way to do this and keep the references to this would be

$('.Count').each(function () {    $(this).prop('Counter',0).animate({        Counter: $(this).text()    }, {        duration: 1000,        easing: 'swing',        step: function (now) {            $(this).text(Math.ceil(now));        }    });});

FIDDLE


IMPORTANT: It seems like a small difference but you should really use a data attribute to hold the original number to count up to. Altering the original number can have un-intended consequences. For instance, I'm having this animation run everytime an element enters the screen. But if the element enters, exits, and then enters the screen a second time before the first animation finishes, it will count up to the wrong number.

HTML:

<p class="count" data-value="200" >200</p><p class="count" data-value="70" >70</p><p class="count" data-value="32" >32</p>

JQuery:

$('.count').each(function () {    $(this).prop('Counter', 0).animate({            Counter: $(this).data('value')        }, {        duration: 1000,        easing: 'swing',        step: function (now) {                                  $(this).text(this.Counter.toFixed(2));        }    });});