Cuando inicio mi aplicación en modo vertical, funciona bien. Luego giro hacia el paisaje y se amplía. Para lograr que se escale correctamente para el modo horizontal, tengo que tocar dos veces en algo dos veces, primero para acercar completamente (el comportamiento normal de doble toque) y nuevamente para alejarlo completamente (nuevamente, el comportamiento normal de doble toque) . Cuando se aleja, se aleja a la escala NUEVA correcta para el modo horizontal.
Volver al retrato parece funcionar de manera más consistente; es decir, maneja el zoom para que la escala sea correcta cuando la orientación vuelve a cambiar a retrato.
Estoy tratando de averiguar si esto es un error. o si esto es algo que se puede arreglar con JavaScript?
Con el metacontenido de la ventana gráfica, estoy configurando la escala inicial en 1.0 y NO estoy configurando la escala mínima o máxima (ni quiero). Estoy configurando el ancho al ancho del dispositivo.
¿Algunas ideas? Sé que mucha gente estaría agradecida de tener una solución, ya que parece ser un problema persistente.
fuente
Respuestas:
Jeremy Keith ( @adactio ) tiene una buena solución para esto en su blog Orientación y escala
Mantenga el marcado escalable al no establecer una escala máxima en el marcado.
Luego, desactive la escalabilidad con javascript en carga hasta que comience el gesto cuando vuelva a permitir la escalabilidad con este script:
Actualización 22-12-2014:
En un iPad 1 esto no funciona, falla en el escucha de eventos. Descubrí que la eliminación
.body
soluciona eso:fuente
maximum-scale=1.0
permanece vigente después de que comienza el gesto. ¿Hay alguna forma de arreglar esto?A Scott Jehl se le ocurrió una solución fantástica que utiliza el acelerómetro para anticipar los cambios de orientación. Esta solución responde muy bien y no interfiere con los gestos de zoom.
https://github.com/scottjehl/iOS-Orientationchange-Fix
Fuente minificada:
fuente
Tuve el mismo problema, y establecer la escala máxima = 1.0 funcionó para mí.
Editar: como se menciona en los comentarios, esto deshabilita el zoom del usuario, excepto cuando el contenido excede la resolución de ancho. Como se mencionó, esto podría no ser prudente. También puede ser deseable en algunos casos.
El código de la ventana gráfica:
fuente
Si tiene el ancho establecido en la ventana gráfica:
Y luego cambie la orientación, se acercará aleatoriamente a veces (especialmente si está arrastrando en la pantalla) para solucionar esto, no establezca un ancho aquí que usé:
Esto corrige el zoom pase lo que pase, entonces puede usar el evento window.onorientationchange o si desea que sea independiente de la plataforma (útil para probar) el método window.innerWidth .
fuente
MobileSafari admite el
orientationchange
evento en elwindow
objeto. Desafortunadamente, no parece haber una forma de controlar directamente el zoom a través de JavaScript. Quizás podría escribir / cambiar dinámicamente lameta
etiqueta que controla la ventana gráfica, pero dudo que eso funcione, solo afecta el estado inicial de la página. Quizás puedas usar este evento para cambiar el tamaño de tu contenido usando CSS. ¡Buena suerte!fuente
Creé una demostración funcional de un diseño horizontal / vertical, pero el zoom debe estar desactivado para que funcione sin JavaScript:
http://matthewjamestaylor.com/blog/ipad-layout-with-landscape-portrait-modes
fuente
He estado usando esta función en mi proyecto.
así que solo agregaEventListener:
fuente
Encontré una nueva solución, diferente de cualquier otra que haya visto, al deshabilitar el zoom nativo de iOS y, en su lugar, implementar la funcionalidad de zoom en JavaScript.
Sérgio Lopes ofrece un excelente trasfondo sobre las otras soluciones al problema de zoom / orientación: una solución al famoso error de zoom de iOS en el cambio de orientación a retrato .
Podría mejorarse, pero para mis necesidades evita los principales inconvenientes que ocurren con todas las demás soluciones que he visto. Hasta ahora solo lo he probado usando Safari móvil en un iPad 2 con iOS4.
El enfoque () / desenfoque () es una solución para evitar el bloqueo ocasional de la función de zoom que puede ocurrir después de cambiar la orientación y hacer zoom unas cuantas veces.
La configuración de document.body.style fuerza un repintado de pantalla completa, lo que evita problemas intermitentes ocasionales en los que el repintado falla gravemente después del zoom.
fuente
Elisabeth, puede cambiar el contenido de la ventana gráfica de forma dinámica agregando la propiedad "id" a la metaetiqueta:
Entonces puedes llamar por javascript:
fuente
Aquí hay otra forma de hacerlo, que parece funcionar bien.
Configure la metaetiqueta para restringir la ventana gráfica a escala = 1, lo que evita el zoom:
<meta name = "viewport" content = "width = device-width, initial-scale = 1, minimum-scale = 1, maximum-scale = 1">
Con javascript, cambie la metaetiqueta 1/2 segundo después para permitir el zoom:
setTimeout (function () {document.querySelector ("meta [name = viewport]"). setAttribute ('content', 'width = device-width, initial-scale = 1');}, 500);
Nuevamente con javascript, en el cambio de orientación, vuelva a cargar la página:
window.onorientationchange = function () {window.location.reload ();};
Cada vez que reorienta el dispositivo, la página se recarga, inicialmente sin zoom. Pero 1/2 segundo después, se restablece la capacidad de hacer zoom.
fuente
Encontré una solución de fácil implementación. Establezca el foco en un elemento de texto que tenga un tamaño de fuente de 50 px al completar el formulario. No parece funcionar si el elemento de texto está oculto, pero ocultar este elemento se hace fácilmente configurando las propiedades de color de los elementos para que no tengan opacidad.
fuente