2010-01-28 5 views
1

Mozilla & Les développeurs d'IE semblent avoir simultanément modifié l'implémentation de leurs éléments de hauteur pour représenter l'implémentation d'Opera ... dont je n'avais pas à m'inquiéter auparavant. Lorsqu'il est exécuté sur un document vierge, 0 renvoie 0 comme hauteur du document. Ma mise en œuvre nécessite de connaître la vraie fenêtre d'affichage du client pour la construction dynamique. Chrome et Safari agissent toujours comme par le passé. ScrollHeight et clientHeight agissent exactement de la même manière.javascript document hauteur complications

Pour compliquer les choses document.height et document.body.offsetHeight prennent maintenant en compte toute la hauteur du document au lieu de seulement la zone visible comme ... J'ai essayé une ancienne méthode d'espacement de table et utilisé un 2000px x 1px transparent et la hauteur du document est réglée à 2000 maintenant .... naturellement Chrome et Safari fonctionnent toujours comme prévu et ne donnent que la taille visible.

Je suis très désespérée pour résoudre ce problème.

Répondre

5

La hauteur de la fenêtre est pas une propriété du document, mais de la fenêtre le visionnement. Vous obtenez la hauteur de la fenêtre d'affichage à partir de window.innerHeight.

Le contenu avec document est uniquement utilisé en tant que solution de repli pour IE, qui ne fournit pas les dimensions window.inner. IE (techniquement incorrect) rend le document.documentElement représente la fenêtre, de sorte que vous pouvez obtenir la hauteur de son clientHeight, sauf si vous êtes en mode Quirks qui (plus incorrectement) fait document.body représenter la fenêtre à la place. (document.height est totalement non standard, éviter.)

Donc, en résumé, et en supposant que vous avez besoin pour supporter le mode Quirks (espérons que vous ne le faites pas):

var height= (
    'innerHeight' in window? window.innerHeight : 
    document.compatMode!=='BackCompat'? document.documentElement.clientHeight : 
    document.body.clientHeight 
); 
+0

absolument génial, merci beaucoup beaucoup !!! – David

+0

bobince mérite un vote-up alors. –

1

J'utilise ce que je suis de James Paldosey's site:

function getDocHeight() { 
    //utility function to find dimensions of page 
    var D = document; 
    return Math.max(
     Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), 
     Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), 
     Math.max(D.body.clientHeight, D.documentElement.clientHeight) 
    ); 
} 
+0

ne fonctionne plus pour les documents vierges, tous ceux-ci renvoient la longueur du document courant qui commence à 0 maintenant. J'ai besoin de la zone visible sur un document vierge. – David

+0

En fait, c'est ainsi que jQuery le fait (http://code.jquery.com/jquery-1.10.2.js): "Soit le défilement [Largeur/Hauteur] ou le décalage [Largeur/Hauteur] ou le client [Largeur/Height], le plus grand des deux, malheureusement, cela ne cause que le bug # 3838 dans IE6/8, mais il n'y a actuellement aucun moyen de le réparer. – AnAurelian

Questions connexes