|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() |
Bonjour,
J'ai besoin de centrer un calque sur la partie affichée d'une page. Ce calque est flottant (style="position:absolute") et est affiché dynamiquement au centre de la fenêtre losqu'on clique sur une vignette de la page (cela affiche la photo en grand). En largeur, j'obtiens sans problème la valeur en utilisant document.body.clientWidth (sous IE8 ou Firefox 4). Par contre, en hauteur, je n'arrive pas à obtenir la dimension intérieure de la fenêtre. Sous Firefox, pas de problème, window.innerHeight ramène la bonne valeur. Par contre, sous IE8, j'obtiens toujours la hauteur totale du document et non celle affichée. J'ai essayé: document.body.clientHeight document.body.offsetHeight document.body.scrollHeight Ces trois fonctions ramènent TOUTES la même valeur, la hauteur totale du document ! C'est pourtant contraire à tout ce que j'ai pu trouver sur les forums consultés, y compris celui-ci. La valeur retournée (pour une page donnée) est toujours identique, que je redimensionne la fenêtre ou pas, même maximisée. Du coup, mon calque est centré sur le milieu du document et se retrouve placé la plupart du temps en dehors de l'écran (le document est assez long et fait plusieurs fois la hauteur de l'écran). D'autre part, document.body.scrollTop et document.body.scrollLeft ramènent toujours 0 quelle que soit l'état la position de la page dans l'écran. Quelqu'un saurait-il expliquer ces anomalies, et surtout en donner une solution (qui marche) ? Pour plus de compréhension, je joins ci-dessous mon script pour ceux qui voudront bien se pencher dessus. Cette fonction est appelée avec les paramètres suivants : - path = chemin de l'image à afficher, - file = nom de l'image à afficher, - ratio = rapport Largeur/Hauteur de l'image Le calque flottant s'appelle 'showimg' et contient un objet image (vide au départ) nommé 'image'. Le but de la fonction est d'afficher le calque au centre de la fenêtre d'appel, quelle qu'en soit la taille et le scroll, et qu'il y tienne en entier (en fait, il doit faire 90% de la dimension maximale possible). Code :
Code :
|
||||
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Développeur Inscription : février 2010 Messages : 360 ![]() |
Bonjour,
Première chose : les attributs de style 'top' et 'left' prennent une valeur avec une unité Code :
par exemple. Par contre, je ne vois pas à quoi cela sert de faire un test sur l'existence du body. Il est toujours là peu importe le navigateur utilisé, et j'ai envie de dire : heureusement |
||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
Première chose : les attributs prennent des unités
Bon sang, mais c'est bien sûr ! Curieusement, internet Explorer se contentait très bien de l'absence d'unités et l'assimilait par défaut à des pixels. Par contre, Firefox convertissait systématiquement les valeurs en une chaine vide, qui donnait donc zéro. Deuxième chose : le DocType Je n'avais trouvé nulle part le fait que si le document possède un doctype les propriétés du document étaient profondément modifiées... Mon document possède effectivement un doctype XHTML Transitionnel 1.0. J'ai utilisé les propriétés clientHeight, clientWidth et scrollTop de l'objet document.documentElement et les valeurs retournées sont correctes, aussi bien dans IE8 dans dans Firefox 4. Où peut-on trouver les propriétés dépendantes du doctype ?? Troisième chose : le test de l'existence de body Vieille habitude... C'est vrai que maintenant tous les navigateurs implémentent l'objet body. je vais supprimer le test, cela économisera (très peu) le temps d'exécution. Conclusion : Mon script marche très bien, je vais pouvoir continuer à implémenter mon moteur d'album photo. Un prototype peut être vu (provisoirement) sur http://docteur.anne.mignard.free.fr/AlbumPhotos C'était un réponse de pro : rapide et efficace. Bravo et Merci ! |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Développeur Inscription : février 2010 Messages : 360 ![]() |
Il n'existe pas (à ma connaissance) de liste complète concernant les propriétés affecté par la présence ou non d'un doctype.
Pour le cas présent, il faut juste savoir que la présence ou non d'un doctype impacte les valeurs des attributs de 'document.body'. Un petit exemple ici (à faire avec IE): http://www.xinotes.org/notes/note/210/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com