Le plugin que @alex a écrit n'a pas fonctionné pour moi pour une raison... je ne pouvais pas comprendre pourquoi. Mais son code source d'inspiration pour moi de venir avec un plus léger de la solution qui fonctionne pour moi. Il utilise jquery promesses. Veuillez noter que, contrairement à @alex s 'plugin, cela n'a pas été pris en compte pour les images d'arrière-plan sur des éléments, seuls les éléments img.
// Fn to allow an event to fire after all images are loaded
$.fn.imagesLoaded = function () {
$imgs = this.find('img[src!=""]');
// if there's no images, just return an already resolved promise
if (!$imgs.length) {return $.Deferred.resolve().promise();}
// for each image, add a deferred object to the array which resolves when the image is loaded
var dfds = [];
$imgs.each(function(){
var dfd = $.Deferred();
dfds.push(dfd);
var img = new Image();
img.onload = function(){dfd.resolve();}
img.src = this.src;
});
// return a master promise object which will resolve when all the deferred objects have resolved
// IE - when all the images are loaded
return $.when.apply($,dfds);
}
Ensuite, vous pouvez utiliser quelque chose comme ceci:
$.ajax({
cache: false,
url: 'ajax/content.php',
success: function(data) {
$('#divajax').html(data).imagesLoaded().then(function(){
// do stuff after images are loaded here
});
}
});
J'espère que c'est utile pour quelqu'un.