J'ai lu différents types de façons d'obtenir les dimensions d'une image une fois qu'une image est complètement chargée, mais serait-il possible d'obtenir les dimensions d'une image une fois qu'elle a commencé à se charger?
Je n'ai pas trouvé grand-chose à ce sujet en recherchant (ce qui me fait croire que ce n'est pas possible), mais le fait qu'un navigateur (dans mon cas Firefox) affiche les dimensions de toute image que j'ouvre dans un nouvel onglet juste dans le titre après il a juste commencé à charger l'image me donne l'espoir qu'il existe réellement un moyen et j'ai juste raté les bons mots clés pour le trouver.
Vous avez raison de dire que l'on peut obtenir les dimensions de l'image avant qu'elle ne soit complètement chargée.
Voici une solution ( démo ):
var img = document.createElement('img');
img.src = 'some-image.jpg';
var poll = setInterval(function () {
if (img.naturalWidth) {
clearInterval(poll);
console.log(img.naturalWidth, img.naturalHeight);
}
}, 10);
img.onload = function () { console.log('Fully loaded'); }
Le code suivant renvoie largeur/hauteur dès qu'il est disponible. Pour tester le changement abc123
dans la source d'image vers n'importe quelle chaîne aléatoire pour empêcher la mise en cache.
Il y a aussi JSFiddle Demo .
<div id="info"></div>
<img id="image" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Island_Archway,_Great_Ocean_Rd,_Victoria,_Australia_-_Nov_08.jpg?abc123">
<script>
getImageSize($('#image'), function(width, height) {
$('#info').text(width + ',' + height);
});
function getImageSize(img, callback) {
var $img = $(img);
var wait = setInterval(function() {
var w = $img[0].naturalWidth,
h = $img[0].naturalHeight;
if (w && h) {
clearInterval(wait);
callback.apply(this, [w, h]);
}
}, 30);
}
</script>
En fait, c'est beaucoup plus facile, il vous suffit de récupérer les dimensions dans la fonction de chargement de l'image.
var tempImage1 = new Image();
tempImage1.src = "path/to/image";
tempImage1.onload = function() {
console.log(tempImage1.width, tempImage1.height);
}
Une façon consiste à utiliser la requête HEAD, qui demande uniquement l'en-tête HTTP de la réponse. Je sais que dans les réponses HEAD, la taille du corps est incluse) Mais je ne sais pas s'il y a quelque chose de disponible pour la taille des images.