4

I've been trying to change the width of a div with a set.interval animation. It works perfectly fine with getELementByID, but it won't work with getElementsByClassName.

The code is the following:

var loadingBar = 200;

function animationBarOne(){
    document.getElementsByClassName("loading-bar").style.width=(loadingBar+"px");
    loadingBar++;
    if(loadingBar === 900){
         clearInterval(intervalId);
    }
}
var intervalId = setInterval(animationBarOne,1);

I'm getting "can't set property width of undefined". As I said it works perfectly with ID, but giving I have like 10 bars to animate I rather use class name so its cleaner.

Thanks in advance.

Omar Gonzalez
  • 1,117
  • 4
  • 14
  • 22

1 Answers1

5

document.getElementsByClassName() returns an array of elements. You need to loop through the array to modify each one in the list:

var loadingBar = 200;

function animationBarOne(){    
    var elements = document.getElementsByClassName("loading-bar");
    for (var i = 0; i < elements.length; i++) {
        elements[i].style.width=(loadingBar+"px");
    }
    loadingBar++;
    if(loadingBar === 900){
         clearInterval(intervalId);
    }
}
var intervalId = setInterval(animationBarOne,1);
Bic
  • 3,141
  • 18
  • 29
  • 1
    Ohh Wasn't aware getElementsByClassName returned an array of elements, makes perfect sense now. Your code worked perfectly fine, thanks – Omar Gonzalez Feb 26 '14 at 22:41