Il y a beaucoup de discussion dans la réponse acceptée à propos d'un problème où le onload
ne se déclenche pas si une image est chargée depuis le cache de WebKit.
Dans mon cas, onload
se déclenche pour les images mises en cache, mais la hauteur et la largeur sont toujours de 0. Un simple setTimeout
a résolu le problème pour moi :
$("img").one("load", function(){
var img = this;
setTimeout(function(){
// do something based on img.width and/or img.height
}, 0);
});
Je ne peux pas dire pourquoi le onload
se déclenche même lorsque l'image est chargée à partir de la mémoire cache (amélioration de jQuery 1.4/1.5 ?) - mais si vous rencontrez toujours ce problème, peut-être qu'une combinaison de ma réponse et de l'événement var src = img.src; img.src = ""; img.src = src;
Cette technique fonctionnera.
(Notez que pour mes besoins, je ne suis pas concerné par les dimensions prédéfinies, que ce soit dans les attributs de l'image ou dans les styles CSS - mais vous pourriez vouloir les supprimer, conformément à la réponse de Xavi. Ou cloner l'image).
4 votes
La réponse acceptée utilise l'événement de chargement de l'image. C'est tout à fait logique, mais cela s'avère être une solution peu fiable dans les situations où les images peuvent être mises en cache (à mon grand désarroi).
0 votes
Mon point de vue sur ce sujet peut vous aider, testé dans la dernière version de Webkit. stackoverflow.com/questions/318630/
5 votes
@Nosredna, vous pourriez être intéressé par le imagesLoaded qui se déclenchera même si les images ont été mises en cache.
7 votes
La réponse correcte à cette question est d'utiliser simplement les propriétés naturalWidth et naturalHeight. Aucune manipulation n'est nécessaire.
0 votes
Vous pourriez également faire exactement ce que vous faites lors du chargement de la fenêtre au lieu du document prêt.
0 votes
Img.naturalWidth et img.naturalHeight est la bonne réponse.