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


getComputedStyleusar lahtmletiqueta expandida .Respuestas:
Cross-browser
@media (width)y@media (height)valoreswindow.innerWidthy.innerHeight@media (width)y@media (height)que incluyen barras de desplazamientoinitial-scaley 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@mediavaloresundefineden IE8-document.documentElement.clientWidthy.clientHeight@media (width)y@media (height)cuando no hay barra de desplazamientojQuery(window).width()que jQuery llama la ventana del navegadorRecursos
matchMediapara 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.clientHeightdevuelve el alto de la página , mientras quewindow.innerHeightdevuelve 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.clientWidthes más preciso y más ampliamente compatible quewindow.innerWidthdocument.documentElement.clientWidthme 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
clientHeighteldocument.documentElementelemento, 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.clientHeightvarias pestañas abiertas.Sé que esto tiene una respuesta aceptable, pero me encontré con una situación en la
clientWidthque 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.clientWidthno 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.innerHeightodocument.documentElement.clientHeightpuede 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.innerHeightydocument.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