Quiero proporcionar a mis visitantes la capacidad de ver imágenes en alta calidad, ¿hay alguna forma de detectar el tamaño de la ventana?
O mejor aún, ¿el tamaño de la ventana gráfica del navegador con JavaScript? Ver área verde aquí:
javascript
cross-browser
viewport
Alix Axel
fuente
fuente
getComputedStyle
usar lahtml
etiqueta expandida .Respuestas:
Cross-browser
@media (width)
y@media (height)
valoreswindow.innerWidth
y.innerHeight
@media (width)
y@media (height)
que incluyen barras de desplazamientoinitial-scale
y las variaciones de zoom pueden hacer que los valores móviles se escalen incorrectamente a lo que PPK llama la vista visual y sean más pequeños que@media
valoresundefined
en IE8-document.documentElement.clientWidth
y.clientHeight
@media (width)
y@media (height)
cuando no hay barra de desplazamientojQuery(window).width()
que jQuery llama la ventana del navegadorRecursos
matchMedia
para obtener dimensiones precisas en cualquier unidadfuente
$
converge
. Si desea integrarse en jQuery, hágalojQuery.extend(verge)
. Ver: verge.airve.com/#static<!DOCTYPE html>
en la parte superior de la página para que el código funcione.document.documentElement.clientHeight
devuelve el alto de la página , mientras quewindow.innerHeight
devuelve el alto de la ventana gráfica . Gran diferencia.Funciones de dimensión jQuery
$(window).width()
y$(window).height()
fuente
$(window).height();
devuelve 536, mientras que$("html").height();
devuelve 10599Puede usar las propiedades window.innerWidth y window.innerHeight .
fuente
document.documentElement.clientWidth
es más preciso y más ampliamente compatible quewindow.innerWidth
document.documentElement.clientWidth
me da el ancho de la ventana gráfica mientras que window.innerWidth me da el ancho del documento. Sí, por ahí.Si no estás usando jQuery, se pone feo. Aquí hay un fragmento que debería funcionar en todos los navegadores nuevos. El comportamiento es diferente en modo Quirks y modo estándar en IE. Esto se encarga de eso.
fuente
clientHeight
eldocument.documentElement
elemento, que le dará el tamaño de la ventana gráfica. Para obtener el tamaño del documento, debe hacerlodocument.body.clientHeight
. Como explica Chetan, este comportamiento se aplica a los navegadores modernos. Es fácil de probar. Simplemente abra una consola y escribadocument.documentElement.clientHeight
varias pestañas abiertas.Sé que esto tiene una respuesta aceptable, pero me encontré con una situación en la
clientWidth
que no funcionó, ya que el iPhone (al menos el mío) devolvió 980, no 320, así que uséwindow.screen.width
. Estaba trabajando en un sitio existente, me estaba haciendo "receptivo" y necesitaba forzar a los navegadores más grandes a usar una meta-vista diferente.Espero que esto ayude a alguien, puede que no sea perfecto, pero funciona en mis pruebas en iOs y Android.
fuente
Miré y encontré una forma de navegador cruzado:
fuente
Pude encontrar una respuesta definitiva en JavaScript: The Definitive Guide, 6th Edition by O'Reilly, p. 391:
Esta solución funciona incluso en modo Quirks, mientras que la solución actual de ryanve y ScottEvernden no.
excepto por el hecho de que me pregunto por qué la línea
if (document.compatMode == "CSS1Compat")
no es asíif (d.compatMode == "CSS1Compat")
, todo se ve bien.fuente
documentElement.clientWidth
no responde al cambio de orientación del dispositivo en iOS. b) muestra el recuento de píxeles físicos (prácticamente inútil) en lugar de píxeles virtualesSi está buscando una solución que no sea jQuery que proporcione valores correctos en píxeles virtuales en dispositivos móviles , y cree que es simple
window.innerHeight
odocument.documentElement.clientHeight
puede resolver su problema, estudie primero este enlace: https://tripleodeon.com/assets/2011/12/ table.htmlEl desarrollador ha realizado buenas pruebas que revelan el problema: puede obtener valores inesperados para Android / iOS, horizontal / vertical, pantallas normales / de alta densidad.
Mi respuesta actual aún no es una bala de plata (// todo), sino más bien una advertencia para aquellos que van a copiar y pegar rápidamente cualquier solución de este hilo en el código de producción.
Estaba buscando el ancho de página en píxeles virtuales en dispositivos móviles, y encontré que el único código de trabajo es (¡inesperadamente!)
window.outerWidth
. Más tarde examinaré esta tabla para encontrar la solución correcta que proporcione la altura, excluyendo la barra de navegación, cuando tenga tiempo.fuente
Este código es de http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
NB: para leer el ancho, use
console.log('viewport width'+viewport().width);
fuente
Hay una diferencia entre
window.innerHeight
ydocument.documentElement.clientHeight
. El primero incluye la altura de la barra de desplazamiento horizontal.fuente
Una solución que se ajuste a los estándares W3C sería crear un div transparente (por ejemplo, dinámicamente con JavaScript), establecer su ancho y alto en 100vw / 100vh (unidades Viewport) y luego obtener su offsetWidth y offsetHeight. Después de eso, el elemento puede eliminarse nuevamente. Esto no funcionará en los navegadores más antiguos porque las unidades de la ventana gráfica son relativamente nuevas, pero si no le importan sino los estándares (que pronto serán), definitivamente podría ir de esta manera:
Por supuesto, también puede establecer objNode.style.position = "fixed" y luego usar el 100% como ancho / alto; esto debería tener el mismo efecto y mejorar la compatibilidad hasta cierto punto. Además, establecer la posición en fijo podría ser una buena idea en general, porque de lo contrario el div será invisible pero consumirá algo de espacio, lo que provocará la aparición de barras de desplazamiento, etc.
fuente
Así es como lo hago, lo probé en IE 8 -> 10, FF 35, Chrome 40, funcionará muy bien en todos los navegadores modernos (como se define window.innerWidth) y en IE 8 (sin ventana. innerWidth) también funciona sin problemas, cualquier problema (como parpadeo debido al desbordamiento: "oculto"), por favor repórtelo. No estoy realmente interesado en la altura de la ventana gráfica ya que hice esta función solo para solucionar algunas herramientas receptivas, pero podría implementarse. Espero que ayude, agradezco los comentarios y sugerencias.
fuente