complicazioni altezza documento javascript
-
23-09-2019 - |
Domanda
Mozilla e IE sviluppatori sembrano avere contemporaneamente cambiato l'attuazione dei loro elementi di altezza per rappresentare l'attuazione Opera ... che in precedenza non ho dovuto preoccuparsi.
var height = (document.height !== undefined) ? document.height : document.body.offsetHeight;
Quando eseguito su un documento vuoto ora ritorna 0 come l'altezza del documento. La mia applicazione richiede la conoscenza della vera finestra del client per costruire dinamicamente. Chrome e Safari sono ancora agiscono come in passato.
scrollHeight e clientHeight agiscono esattamente lo stesso.
A complicare le cose document.height e document.body.offsetHeight sono ora in corso anche l'intera altezza del documento in considerazione, invece di solo l'area visualizzabile come si usava ... ho provato un vecchio metodo di spaziatura tavolo e usato un 2000px x 1px trasparente eil documento altezza è impostata a 2000 ora .... naturalmente Chrome e Safari funzionano ancora come previsto e solo dare la dimensione visibile.
Sono molto disperata per risolvere questo problema.
Soluzione
L'altezza finestra non è una proprietà del documento, ma della finestra di visualizzazione. È possibile ottenere l'altezza finestra da window.innerHeight
.
La roba con document
è necessaria solo come ripiego per IE, che non fornisce le dimensioni window.inner
. IE (tecnicamente in modo non corretto) rende il document.documentElement
rappresentano la finestra, in modo da poter ottenere l'altezza dalla sua clientHeight
, a meno che non siete in quirks mode che (più in modo non corretto) rende document.body
rappresentano la finestra invece. (document.height
è totalmente non standard;. Evitarlo)
Quindi, in sintesi, e supponendo che è necessario supportare quirks mode (speriamo non lo fai):
var height= (
'innerHeight' in window? window.innerHeight :
document.compatMode!=='BackCompat'? document.documentElement.clientHeight :
document.body.clientHeight
);
Altri suggerimenti
Io uso questo, che ho ottenuto dal sito di James Paldosey :
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)
);
}