function Countup(instanceContainer, instanceSpanClass, instanceCount) { var $container = instanceContainer, spanClass = instanceSpanClass, nextCount = instanceCount + 1, counterAnimationHeight = $container.height(), speedDefault = 0.6, i = 0; /* Count up animation */ function makeSpan(newCount) { for (i = nextCount; i <= newCount; i++) { $container.append('<span class="'+spanClass+'">'+nextCount+'</span>'); nextCount++; } } function countUp(speed) { var $spans = $container.find('span.'+spanClass), up = (counterAnimationHeight * ($spans.length - 1)) * -1; $spans.css({ 'top': up + 'px', 'transition-duration': speed + 's' }); } this.doUp = function(newCount, speed) { if (speed === undefined) { speed = speedDefault; } makeSpan(newCount); setTimeout(function () { countUp(speed); }, 100); } } // call like `var counter = new Countup($('#today-now'), 'today-num', 0)` where 0 is current count var counter = new Countup($('#today-now'), 'today-num', 0); setTimeout(function() { counter.doUp(1); }, 2000);
<span id="today-now" class="today-now"> <span class="today-num">0</span> </span> / <span id="today-total">5</span>
.today-now { position: relative; display: inline-block; height: 110px; font-family: "PT Sans Narrow", "Nanum Gothic", sans-serif; font-size: 84px; font-weight: 300; text-align: right; vertical-align: -26px; overflow: hidden; } .today-now .today-num { position: relative; top: 0; display: block; height: 100%; transition: all 0.6s; }