reload images test

by FirstBug

JavaScript

var preloadImages = function(preload, callBack) {
  var promises = [];
  var response = {
    'loaded': [],
    'errored': [],
    'aborted': []
  };
  for (var i = 0; i < preload.length; i++) {
    (function(url, promise) {
      var img = new Image();
      img.onload = function() {
        response.loaded.push(this.src);
        promise.resolve();
      };
      // Use the following callback methods to debug
      // in case of an unexpected behavior.
      img.onerror = function() {
        response.errored.push(this.src);
        promise.resolve();
      };
      img.onabort = function() {
        response.aborted.push(this.src);
        promise.resolve();
      };
      //
      img.src = url;
    })(preload[i], promises[i] = $.Deferred());
  }
  $.when.apply($, promises).done(function() {
    callBack.call(response);
  });
};


var arr_valid = [
  'http://www.google.com/logos/doodles/2014/doodle-4-google-2013-new-zealand-winner-5595355081080832-hp.jpg', 'http://www.google.com/logos/doodles/2014/australia-day-2014-doodle-4-google-2013-winner-6247445470117888-hp.jpg'
];

var arr_invalid = [
  'http://www.google.com/logos/d.jpg', 'http://www.google.com/logos/e.jpg'
];
preloadImages(arr_valid, function() {
  console.log(this);// response object
  console.log('All loaded');
});
// More Precise
preloadImages(arr_invalid, function() {
  var response = this;
  var hasError = response.errored.length + response.aborted.length;
  if (hasError > 0) {
    console.log('failed ' + hasError);
  } else {
    console.log('all loaded');
  }
});