TLDR
Se si desidera solo per interrogare l'altezza della finestra, cross-browser, e da fare con esso, utilizzare jQuery.documentSize e chiamare $.windowHeight()
. Per implementare la tua soluzione, continua a leggere.
Quando utilizzare jQuery o clientHeight
del documento
di jQuery $(window).height()
è un wrapper per document.documentElement.clientHeight
. Ti dà l'altezza della finestra, escludendo lo spazio coperto dalle barre di scorrimento del browser. In generale, funziona bene e gode del supporto quasi universale del browser. Ma ci sono quirks on mobile, and in iOS in particular.
in IOS, il valore di ritorno finge che le barre di URL e scheda sono visibili, anche se non lo sono. Vengono nascosti non appena l'utente scorre e il browser passa all'interfaccia utente minima.L'altezza della finestra è aumentata di circa 60px nel processo, ovvero non riflessa nello clientHeight
(o in jQuery).
Il clientHeight
restituisce la dimensione dello layout viewport, not the visual viewport e pertanto non riflette lo stato dello zoom.
Quindi ... non proprio così eccezionale sul cellulare.
Quando utilizzare window.innerHeight
C'è un'altra proprietà è possibile interrogare: window.innerHeight
. Si
- restituisce l'altezza della finestra,
- si basa sulla finestra visiva, cioè riflette lo stato di zoom,
- viene aggiornato quando il browser entra minima UI (Safari Mobile),
- ma include l'area coperta dalle barre di scorrimento.
L'ultimo punto indica che non è possibile rilasciarlo come sostituzione. Inoltre, non è supportato in IE8 e rotto in Firefox prior to FF25 (ottobre 2013).
Ma può essere utilizzato in sostituzione sul mobile, perché i browser mobili presenti barre di scorrimento come una sovrapposizione temporanea che non consuma spazio nella finestra - window.innerHeight
e d.dE.clientHeight
restituire lo stesso valore a tale riguardo.
Cross-Browser soluzione
Quindi una soluzione cross-browser, per scoprire la vera altezza della finestra, funziona come questo (pseudo codice):
IF the size of browser scroll bars is 0 (overlay)
RETURN window.innerHeight
ELSE
RETURN document.documentElement.clientHeight
La cattura è come determinare la dimensione (larghezza) delle barre di scorrimento per un determinato browser. Devi eseguire un test per questo. Non è particolarmente difficile: dai uno sguardo allo my implementation here o allo original one by Ben Alman se lo desideri.
Se non si desidera eseguire il rollover, è anche possibile utilizzare un componente del mio - jQuery.documentSize - e farlo con un $.windowHeight()
call.
Mi sono imbattuto in questo stesso problema, ma ho trovato una soluzione CSS pura grazie a [questa domanda] (http://stackoverflow.com/questions/5729525/ipad-safari-100-height-issue). –