JP, Après avoir vérifié votre solution, j'avais toujours des problèmes dans Firefox où il ne préchargeait pas les images avant de passer au chargement de la page. J'ai découvert cela en mettant des sleep(5)
dans mon script côté serveur. J'ai mis en œuvre la solution suivante basée sur la vôtre qui semble résoudre ce problème.
En fait, j'ai ajouté une fonction de rappel à votre plugin de préchargement jQuery, afin qu'il soit appelé une fois que toutes les images sont correctement chargées.
// Helper function, used below.
// Usage: ['img1.jpg','img2.jpg'].remove('img1.jpg');
Array.prototype.remove = function(element) {
for (var i = 0; i < this.length; i++) {
if (this[i] == element) { this.splice(i,1); }
}
};
// Usage: $(['img1.jpg','img2.jpg']).preloadImages(function(){ ... });
// Callback function gets called after all images are preloaded
$.fn.preloadImages = function(callback) {
checklist = this.toArray();
this.each(function() {
$('<img>').attr({ src: this }).load(function() {
checklist.remove($(this).attr('src'));
if (checklist.length == 0) { callback(); }
});
});
};
Par curiosité, dans mon contexte, je l'utilise comme suit :
$.post('/submit_stuff', { id: 123 }, function(response) {
$([response.imgsrc1, response.imgsrc2]).preloadImages(function(){
// Update page with response data
});
});
J'espère que cela aidera quelqu'un qui arrive sur cette page depuis Google (comme moi) et qui cherche une solution pour précharger des images lors d'appels Ajax.
11 votes
$.each(arguments,function(){(new Image).src=this});