Bonjour,
Fonction du navigateur utilisé, (en particulier Firefox et Chrome) j'ai un problème de récupération de la hauteur et largeur de l'image préchargée. Pourtant j'effectue plusieurs tests : image complètement chargée et ou hauteur / largeur non nulle
Voici le code javascript qui me pose problème :
La fonction resize véhicule le nom de l'image, la hauteur écran, la largeur écran.
Si taille image inférieur à l'écran l'image reste en l'état. Sinon on la recadre en respectant le ratio image verticale ou horizontale maximum selon résolution écran.
Mon problème est la récupération de la taille de l'image qui va être affichée par la suite...
Je précharge donc cette image... J'ai ajouté un image.onload pour ne pas avoir une taille zéro uniquement sous Firefox et Chrome... qui retourne True systématiquement sur image.complete, donc je teste aussi la dimention de l'image...
Mon code passe outre ce test... Pourquoi ?
J'ai donc inséré un onload...
La boite d'alerte récupère à tout coup la hauteur et la largeur de l'image préchargée… les variables imgH et imgW qui suivent contiennent bien ces valeurs mais ensuite elles sont perdues une fois l'instruction image.src = url;… tant avec la valeur this.width que image.width.
Où se situe ma bourde ? Je patine dans la choucroute depuis une semaine...
Merci par avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 <script type="text/javascript"> function IsImageOk(img) { // Test si image non chargée if (!img.complete) { return false; } // Test si largeur zéro if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) { return false; } // Test si hauteur zéro if (typeof img.naturalHeight != "undefined" && img.naturalHeight == 0) { return false; } // Sinon tout est Ok return true; } function myTimer() { // pour patienter } // Permet de limiter la taille de l'image à la résolution écran si besoin function resize(url, mh, mw) { // Précharger Image(url) var image = new Image(); image.onload = function() { // pour test si récup hauteur et largeur alert(this.width + " x " + this.height); // Déterminer la taille de l'image chargée imgH = this.height; imgW = this.width; } image.src = url; // Test image non chargee on patiente if (!IsImageOk(image)) { myVar = setInterval(function(){myTimer()},1000); } // Déterminer la taille de l'image chargée // imgH = image.height; // imgW = image.width; if( imgH < mh && imgW < mw ) { // Image d'origine plus petite que la fenêtre, on initialise la taille de l'image imgH = imgH; imgW = imgW; } else { imgH = imgH; imgW = imgW; ratioH = mh / imgH; ratioW = mw / imgW; if ( ratioH < ratioW || imgH == imgW ) { imgH = Math.floor((imgH * ratioH)); imgW = Math.floor((imgW * ratioH)); } else { imgH = Math.floor((imgH * ratioW)); imgW = Math.floor((imgW * ratioW)); } } } </script>
Partager