Search code examples
javascripthtml5-canvas2d-games

How to alert after all images loaded?


I'm building a JavaScript game and I want to alert after all images are loaded. I tried this code but it's not working:

function loadEveryThing() {
  var imgNumber = 0;

  img1 = new Image();
  img1.src = "1.png"
  img1.onload = function() {
    imgNumber = imgNumber + 1;
  }

  img2 = new Image();
  img2.src = "2.png"
  img2.onload = function() {
    imgNumber = imgNumber + 1;
  }

  img3 = new Image();
  img3.src = "3.png"
  img3.onload = function() {
    imgNumber = imgNumber + 1;
  }

  if (imgNumber == 3) alert("done")
}

Solution

  • The images are loading asynchronously. Your checker code will run before any of the images get loaded. I suggest you do the checks for each image load. Something like:

    function loadImages(urls,callback){
    
      //counter
      var counter = 0;
    
      //checking function
      function check(){
        counter++;
        if(urls.length === counter) callback();
      }
    
      //for each image, attach the handler and load
      for(var i = urls.length; i--;){
        img = new Image();
        img3.onload = check;
        img.src= urls[i]
      }
    
    }
    
    loadImages([/*array of urls*/],function(){
      //this function fires when all images have loaded
    });