Among the myriad answers provided here, I suggest running a validation on your HTML code. Additionally, some of your CSS settings were causing glitches while scrolling due to fixed background images not moving along.
My approach differed slightly from the rest as I opted for $.animate and a step function instead of using setInterval. Just like others, I selected a class named 'fill-me-up' to target each item individually.
Here is the updated Fiddle link: http://jsfiddle.net/LFbKs/6/
NOTE: Take a look at the fiddle as I made minor adjustments to the HTML and significant changes to the CSS.
// for each item we need to "fill up"
$('.fill-me-up').each(function(){
// cache DOM references
var this$ = $(this)
, bar$ = this$.find('.bar')
, show$ = this$.find('.show')
, span$ = bar$.find('div span')
// the target percentage height for this item
, p = span$.text()
// combine '.bar' and '.show' so we can apply the animation to both
, toAnimate = $().add(bar$).add(show$);
// add class causing fade-in
bar$.find('div').addClass('is-visible');
// animate height to target height over 2 seconds and
// at each step, update the span with a truncated value
toAnimate.animate(
{ height: p+'%' },
{
duration: 2000,
step: function( currentStep ) {
span$.html('%'+currentStep.toFixed(0));
}
}
);
});
Cheers