NOTA: J'ai écrit ce texte en 2010, les navigateurs utilisés étaient IE 8/9 beta, Firefox 3.x, et Chrome 4.x. Veuillez utiliser ce texte à des fins de recherche uniquement, je doute que vous puissiez copier/coller ce texte dans un navigateur moderne et qu'il fonctionne sans problème.
AVERTISSEMENT : Nous sommes en 2017 maintenant, je reçois encore des points sur ce sujet de temps en temps, s'il vous plaît utiliser uniquement à des fins de recherche. Je n'ai actuellement aucune idée de la façon de détecter l'état de chargement des images, mais il existe probablement des moyens beaucoup plus gracieux de le faire que cela... du moins je l'espère sérieusement. Je recommande fortement de NE PAS utiliser mon code dans un environnement de production sans plus de recherche.
AVERTISSEMENT Deuxième partie Electric Boogaloo : Nous sommes en 2019 maintenant, la plupart des fonctionnalités de jQuery sont intégrées dans vanilla JS maintenant. Si vous l'utilisez encore, il est peut-être temps d'arrêter et d'envisager de passer à MDN et de lire les nouvelles choses amusantes que vanilla JS a à offrir.
Je suis un peu en retard à cette fête, peut-être que cette réponse aidera quelqu'un d'autre...
Si vous utilisez jQuery, ne vous embêtez pas avec les gestionnaires d'événements classiques (onclick/onmouseover/etc), en fait, arrêtez tout simplement de les utiliser. Utilisez les méthodes d'événements fournies dans leur API .
Cette alerte aura lieu avant que l'image ne soit ajoutée au corps, car l'événement load est déclenché lorsque l'image est chargée en mémoire. Il fait exactement ce que vous lui demandez : créer une image avec la src de test.jpg, quand test.jpg se charge faire une alerte, puis l'ajouter au corps.
var img = $('<img src="test.jpg" />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
Cette alerte, une fois l'image insérée dans le corps, fera à nouveau ce que vous lui avez demandé : créer une image, déclencher un événement (pas de src défini, donc elle n'a pas été chargée), ajouter l'image au corps (toujours pas de src), définir maintenant la src... maintenant l'image est chargée et l'événement est déclenché.
var img = $('<img />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
$img.attr('src','test.jpg');
Bien entendu, vous pouvez également ajouter un gestionnaire d'erreurs et fusionner un ensemble d'événements à l'aide de bind().
var img = $('<img />');
img.bind({
load: function() {
alert('Image loaded.');
},
error: function() {
alert('Error thrown, image didn\'t load, probably a 404.');
}
});
$('body').append(img);
img.attr('src','test.jpg');
A la demande de @ChrisKempen ...
Voici une façon non événementielle de déterminer si les images sont cassées après le chargement du DOM. Ce code est un dérivé du code d'un article de StereoChrome qui utilise les attributs naturalWidth, naturalHeight et complete pour déterminer si l'image existe.
$('img').each(function() {
if (this.naturalWidth === 0 || this.naturalHeight === 0 || this.complete === false) {
alert('broken image');
}
});
0 votes
Je ne comprends pas bien : voulez-vous une solution unique purement JS pour détecter le chargement d'une image, ou cherchez-vous une bibliothèque alternative à jQuery pour détecter le chargement d'une image ?
0 votes
L'un ou l'autre me conviendrait. Je n'abandonnerais pas jQuery, car je l'utilise ailleurs ; j'exprime simplement mon soupçon qu'il s'agit d'un problème bien résolu dans une bibliothèque que je ne connais pas.
0 votes
N'oubliez pas de nous dire ce que vous faites !
1 votes
Après des tonnes de lecture, la meilleure réponse semble être d'utiliser imagesBibliothèque Javascript chargée il l'est : Licence MIT, sur Github, communauté massive, projet mature (très ancien, depuis 2010, mais toujours actif), 7Kb minifié (léger !), & aucune dépendance. related stackoverflow.com/questions/1977871/