Mon affectation de classe veut que j'utilise la balise defer
pour le script auquel je fais référence, mais cela entraîne que l'image naturalWidth
ne soit pas définie en raison de l'ordre d'exécution dans mon fichier js.Pourquoi naturalHeight ou naturalWidth renvoient `undefined`?
Mon HTML a cette ligne dans la tête (affectation me veut le mettre dans le <head>
mais utiliser defer="defer"
) <script src="scripts/script.js" defer="defer"></script>
Mes js:
var catImageWidth = document.getElementById("cat-image").naturalWidth;
var birdImage = document.getElementById("bird-image");
birdImage.width = catImageWidth;
J'ai donc essayé ceci:
var catImage = document.getElementById("cat-image");
var birdImage = document.getElementById("bird-image");
var catImageWidth;
catImage.onload = function() {
catImageWidth = this.naturalWidth;
console.log(catImageWidth) //logs 600
}
birdImage.width = catImageWidth; //logs `undefined`
Je pense que l'affectation de birdImage.width
est indéfinie parce que cette ligne de code ru ns avant catImage.onload
se passe réellement. Est-ce que cela signifie que je suis esclave de l'attribution de birdImage.width
dans le cadre de la function
de catImage.onload
?
P.S. J'ai essayé ES6 de catImage.onload =() => { //block of code }
mais cela n'a pas semblé fonctionner.
Cela doit encore arriver même si je le 'defer' tag? Je pensais que reporter le script attendait que le DOM ait fini de charger, ou bien les éléments d'image ne sont-ils pas considérés comme faisant partie de celui-ci? – simmonson
Il devrait fonctionner avec defer = "reporter" –
c'est ce que j'ai, comme indiqué ci-dessus dans ma question. Donc, je ne suis pas sûr pourquoi il ne «différerait» pas. – simmonson