Skip to content

Instantly share code, notes, and snippets.

@sp1r1don
Last active September 12, 2017 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sp1r1don/7bd6a08e5da05c055294293cf7abd913 to your computer and use it in GitHub Desktop.
Save sp1r1don/7bd6a08e5da05c055294293cf7abd913 to your computer and use it in GitHub Desktop.
AJAX image load for masonry.desandro
$.fn.imagesLoaded = function () {
// get all the images
let $imgs = this.find('img[src!=""]');
// if there's no images return resolved promise
if (!$imgs.length) {return $.Deferred().resolve().promise();}
// for each image, add a deferred object to the array
let dfdarr = [];
$imgs.each(function(){
let dfd = $.Deferred();
dfdarr.push(dfd);
let img = new Image();
img.onload = function(){dfd.resolve();}
img.onerror = function(){dfd.resolve();}
img.src = this.src;
});
// return a master promise object
return $.when.apply($,dfdarr);
}
//usage
$.get(..., function(data){
let $grid = $('.grid');
let $data = $( data );
$data.imagesLoaded().then(function(){
$grid.append($data).masonry('appended', $data, true);
});
}
@diafree82
Copy link

diafree82 commented Sep 12, 2017

Thx, realy good solution

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment