Hauteur et largeur d'un cadre en Javascript

Résolu/Fermé
Fiofio - 24 août 2009 à 01:00
 Fiofio - 24 août 2009 à 21:13
Bonjour,

J'ai besoin de superposer deux images au centre d'un cadre. Je ne vous explique pas pourquoi deux images au lieu d'une seule, cela a sa raison d'être.
La première image carrée fait 562px de coté, elle représente l'ombre portée de la seconde image
La seconde image qui vient par dessus, qui doit se superposer de façon centrée est plus petite et fait 500px de coté.
La page est composée de trois cadres :
- a gauche :
un cadre latéral sur toute la hauteur pour les menus nommé "bordgauche";
- à droite :
un cadre bandeau en haut pour le nom de mon site nommé "entete";
un cadre (le plus grand) en bas pour le contenu nommé "galerie".
Ces cadres n'ont pas de dimension fixe et s'adaptent à la taille de l'écran de l'utilisateur.

Les deux images doivent se superposer dans le cadre "galerie"

pour ce faire j'ai bien évidement tenté le javascript suivant dans le code du cadre "galerie" :

var tailleombre=562;
var tailleimage=500;
largeurdoc=document.width;
hauteurdoc=document.height;
xombre=largeurdoc/2-tailleombre/2;
yombre=hauteurdoc/2-tailleombre/2;
ximage=xombre+31;
yimage=yombre+31;

document.write('\
<image style="display: block; position: absolute; top:'+yombre+'px; left:'+xombre+'px; visibility: visible; height:'+tailleombre+'px; width:'+tailleombre+'px;" src="ombre.png">\
<image name="icarree" style="display: block; position: absolute; top:'+yimage+'px; left:'+ximage+'px; visibility: visible; height:'+tailleimage+'px; width:'+tailleimage+'px; "\
src="imagecarree1.jpg">\
');


Sous Firefox 3 les deux images se superposent correctement et son bien centrées horizontalement. Mais verticalement elles sont à moitié en dehors du cadre en haut. J'ai vérifié les valeurs retournées par les instructions et ça donne ceci (sous Firefox 3):
- pour document.width ça renvoie bien la bonne largeur du cadre quel que soit la taille de l'écran ;
- pour document.height la hauteur du cadre renvoyée est de 0px ce qui explique que l'image soit à moitié en dehors du cadre en haut. Donc là je ne comprends pas pourquoi 0px.

Mais il y a pire :

Sous IE les instructions document.height et document.width renvoient "undefined" et donc forcément ça foire complètement.

Je suis donc très perplexe. J'ai regardé mon gros bouquin javascript, les forums, je viens d'y passer toute l'après-midi et la soirée à tester plusieurs trucs et rien à faire pas de solution.

SVP existe-t-il une instruction javascript valide tant sous Firefox que sous IE renvoyant la largeur et la hauteur d'un cadre dans une page comportant plusieurs cadres ? Votre aide me serait d'un grand secours.

Merci d'avance.
Fiofio

PS : pour voir de quoi il s'agit cliquez sur le lien suivant vous verrez les deux images en question mais non centrées car leur positionnement est fixe. vous comprendrez que c'est mieux quand c'est centré au milieu du cadre : http://www.gardiendutemps.org/galeries/auhasard/

1 réponse

Bonsoir,

J'ai finalement trouvé la réponse sur un site anglophone (recherches que j'avais exclues précédemment.)
En voici la traduction (pas compliquée même pour un nul en anglais comme moi :

Comment puis-je obtenir la largeur et la hauteur d'un document ?

Internet Explorer - utilisez (document.body.clientWidth - document.body.clientHeight)

Mozilla - utilisez (document.body.clientWidth - document.body.clientHeight) ou (window.innerWidth - window.innerHeight)

Netscape 4x - utilisez (window.innerWidth - window.innerHeight)
Netscape 6 - utilisez (window.innerWidth - window.innerHeight)

Opera - utilisez (window.innerWidth - window.innerHeight)

Pour une bonne compatibilité avec les navigateurs précités le code suivant est impeccable :

//opera Netscape 6 Netscape 4x Mozilla 
if (window.innerWidth || window.innerHeight){ 
docwidth = window.innerWidth; 
docheight = window.innerHeight; 
} 
//IE Mozilla 
if (document.body.clientWidth || document.body.clientHeight){ 
docwidth = document.body.clientWidth; 
docheight = document.body.clientHeight; 
}


C'est royal !!!

Maintenant mes deux images se superposent impeccablement au centre de l'espace qui leur est aloué (l'un des trois cadres de la page.)
J'ai même poussé le perfectionnement jusqu'à dimensionner les images en fonction de ce même espace disponible de sorte qu'elles soient toujours entièrement visibles à l'écran sans jamais mordre sur les boutons du haut quelle que soit la taille de la page ouverte.

Vous pouvez allez voir le résultat et vous inspirer du code. Les commentaires vous aideront à la compréhension :
http://www.gardiendutemps.org/galeries/auhasard/

Pour tester, reduisez les dimensions de votre navigateur et réactualisez la page.

amusez-vous bien.
Fiofio
2