¿Cómo uso jQuery para determinar el tamaño de la ventana gráfica del navegador y volver a detectar esto si la página cambia de tamaño? Necesito hacer un tamaño de IFRAME en este espacio (llegando un poco en cada margen).
Para aquellos que no saben, la ventana gráfica del navegador no es del tamaño del documento / página. Es el tamaño visible de su ventana antes del desplazamiento.
Respuestas:
Para obtener el ancho y la altura de la ventana gráfica:
cambiar el tamaño del evento de la página:
fuente
innerWidth
/innerHeight
es más correcto de usar (cubriendo el zoom).DOCTYPE
declaración adecuada , por ejemplo<!DOCTYPE html>
.Puede probar las unidades de ventana gráfica (CSS3):
Soporte del navegador
fuente
1. Respuesta a la pregunta principal.
El script
$(window).height()
funciona bien (muestra la altura de la ventana gráfica y no el documento con altura de desplazamiento), PERO necesita que coloque correctamente la etiqueta doctype en su documento, por ejemplo, estos doctypes:Para HTML 5:
<!DOCTYPE html>
Para HTML4 de transición:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Probablemente el tipo de documento predeterminado asumido por algunos navegadores es tal, que
$(window).height()
toma la altura del documento y no la altura del navegador. Con la especificación doctype, se resuelve satisfactoriamente, y estoy bastante seguro de que los peps evitarán el "cambio de desbordamiento de desplazamiento a oculto y luego de regreso", que es, lo siento, un truco un poco sucio, especialmente si no lo hace ' t documentarlo en el código para el uso futuro del programador.2. Un consejo ADICIONAL, tenga en cuenta: Además, si está haciendo un script, puede inventar pruebas para ayudar a los programadores a usar sus bibliotecas, permítame inventar un par:
$ (documento) .ready (función () {});EDITAR: sobre la parte 2, "Una sugerencia ADICIONAL, nota aparte": @Machiel, en el comentario de ayer (04/09/2014), estaba TOTALMENTE en lo cierto: el cheque de los $ no puede estar dentro del evento listo de Jquery, porque estamos, como señaló, asumiendo que $ ya está definido. Gracias por señalar eso, y por favor, el resto de ustedes lectores corrija esto, si lo usó en sus scripts. Mi sugerencia es: en sus bibliotecas, coloque una función "install_script ()" que inicialice la biblioteca (ponga cualquier referencia a $ dentro de dicha función init, incluida la declaración de ready ()) y AL COMIENZO de dicha función "install_script ()" , verifique si $ está definido, pero haga que todo sea independiente de JQuery, para que su biblioteca pueda "diagnosticarse a sí misma" cuando JQuery aún no esté definido. Prefiero este método en lugar de forzar la creación automática de un JQuery trayéndolo desde un CDN. Esas son pequeñas notas aparte para ayudar a otros programadores. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. No es necesario que vaya y busque un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. No es necesario que vaya y busque un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro.
fuente
$
después de que ya haya utilizado la$
llamada$(document).ready(function() { } );
. Es bueno si verifica si jQuery está disponible, pero en este punto ya es demasiado tarde.Puede usar $ (window) .resize () para detectar si la ventana gráfica cambia de tamaño.
jQuery no tiene ninguna función para detectar consistentemente el ancho y la altura correctos de la ventana gráfica [1] cuando hay una barra de desplazamiento presente.
Encontré una solución que usa la biblioteca Modernizr y específicamente la función mq que abre consultas de medios para javascript.
Aquí está mi solución:
Mi respuesta probablemente no ayudará a cambiar el tamaño de un iframe al 100% del ancho de la ventana gráfica con un margen a cada lado, pero espero que brinde consuelo a los desarrolladores web frustrados con la incoherencia del navegador del cálculo del ancho y la altura de la ventana gráfica de JavaScript.
Tal vez esto podría ayudar con respecto al iframe:
[1] Puede usar $ (ventana) .width () y $ (ventana) .height () para obtener un número que será correcto en algunos navegadores, pero incorrecto en otros. En esos navegadores, puede intentar usar window.innerWidth y window.innerHeight para obtener el ancho y la altura correctos, pero recomendaría este método porque dependería de la detección de agentes de usuario.
Por lo general, los diferentes navegadores son inconsistentes acerca de si incluyen o no la barra de desplazamiento como parte del ancho y alto de la ventana.
Nota: Tanto $ (window) .width () como window.innerWidth varían entre los sistemas operativos que usan el mismo navegador. Ver: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
fuente
fuente
Para obtener el tamaño de la ventana gráfica al cargar y cambiar el tamaño (según la respuesta de SimaWB):
fuente
Tenga en cuenta que las unidades de ventana gráfica CSS3 (vh, vw) no funcionarían bien en iOS Cuando se desplaza la página, el tamaño de la ventana gráfica se recalcula de alguna manera y el tamaño del elemento que usa unidades de ventana gráfica también aumenta. Por lo tanto, en realidad se requiere JavaScript.
fuente