vue ismobile check javascript android ios mobile tablet

javascript - ismobile - ¿Cómo ajustar la pantalla después de cambiar el ancho de la ventana gráfica en el cambio de orientación?



var ismobile (4)

OK, la respuesta está en los atributos de *-scale después de todo.

Puede forzar una escala específica estableciendo tanto maximum-scale minimum-scale en el mismo valor. Pero tienes que sacrificar la escala del usuario configurando la metaetiqueta en <meta name=''viewport'' content=''user-scalable=no'' /> .

Tenga en cuenta que la configuración de la *-scale está relacionada con las dimensiones de la pantalla del dispositivo, que varían de un dispositivo a otro. Afortunadamente, puede buscarlos en el objeto de screen en JS.

Por lo tanto, si el ancho del contenido es inferior a 980, la escala forzada debe ser screen_dimension / content_width .

Esta versión actualizada de mi JS anterior ha hecho que los cambios de orientación funcionen sin problemas. Probado en iPhone 4 y iPad 2.

function adapt_to_orientation() { var content_width, screen_dimension; if (window.orientation == 0 || window.orientation == 180) { // portrait content_width = 630; screen_dimension = screen.width * 0.98; // fudge factor was necessary in my case } else if (window.orientation == 90 || window.orientation == -90) { // landscape content_width = 950; screen_dimension = screen.height; } var viewport_scale = screen_dimension / content_width; // resize viewport $(''meta[name=viewport]'').attr(''content'', ''width='' + content_width + '','' + ''minimum-scale='' + viewport_scale + '', maximum-scale='' + viewport_scale); }

Necesito el ancho de la ventana gráfica para que una página tenga 950 px en horizontal y 630 px en vertical. Estos anchos de píxel son desafortunadamente inflexibles.

Estoy ajustando el ancho del contenido DOM basado en la orientación usando consultas de medios CSS.

Estoy escuchando los eventos de cambio de orientación en JS para cambiar el tamaño de la ventana gráfica en el cambio de orientación.

Todo se ve bien en la carga de la página inicial (vertical u horizontal).

Sin embargo, después de un cambio de orientación, Mobile Safari conserva la configuración de escala anterior, en lugar de ajustar la ventana gráfica a la pantalla. Un doble toque o dos lo enderezan. Pero necesito que sea automático.

Adjunto la fuente a continuación, y la subí a una URL demostración.

A continuación se muestran las capturas de pantalla tomadas después de los cambios de orientación: de horizontal a vertical y de vertical a horizontal.

¿Cómo puedo obligar a Safari a establecer automáticamente el ancho de la ventana gráfica al ancho de la pantalla? ¿O voy a hacer todo esto mal?

Cambiar las diferentes configuraciones de escala en la ventana gráfica no ha ayudado. La configuración maximum-scale=1.0 o initial-scale=1.0 parece anular mi width , estableciendo el width en el width del device-width (es decir, 1024 o 768 en mi iPad 2), dejando un margen muerto. Establecer minimum-scale=1.0 parece no hacer nada.

<!DOCTYPE html> <html> <head> <title>iPad orientation</title> <meta name="viewport" content="user-scalable=yes"> <script src="jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript" charset="utf-8">; /** * update viewport width on orientation change */ function adapt_to_orientation() { // determine new screen_width var screen_width; if (window.orientation == 0 || window.orientation == 180) { // portrait screen_width = 630; } else if (window.orientation == 90 || window.orientation == -90) { // landscape screen_width = 950; } // resize meta viewport $(''meta[name=viewport]'').attr(''content'', ''width=''+screen_width); } $(document).ready(function() { // bind to handler $(''body'').bind(''orientationchange'', adapt_to_orientation); // call now adapt_to_orientation(); }); </script> <style type="text/css" media="screen"> body { margin: 0; } #block { background-color: #333; color: #fff; font-size: 128px; /* landscape */ width: 950px; } #block .right { float: right } @media only screen and (orientation:portrait) { #block { width: 630px; } } </style> </head> <body> <div id="block"> <div class="right">&rarr;</div> <div class="left">&larr;</div> </div> </body> </html>


Tuve este problema y escribí algunos JavaScript para solucionarlo. Lo puse en Github aquí:

https://github.com/incompl/ios-reorient

Aquí está el código para su conveniencia:

window.document.addEventListener(''orientationchange'', function() { var iOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/g); var viewportmeta = document.querySelector(''meta[name="viewport"]''); if (iOS && viewportmeta) { if (viewportmeta.content.match(/width=device-width/)) { viewportmeta.content = viewportmeta.content.replace(/width=[^,]+/, ''width=1''); } viewportmeta.content = viewportmeta.content.replace(/width=[^,]+/, ''width='' + window.innerWidth); } // If you want to hide the address bar on orientation change, uncomment the next line // window.scrollTo(0, 0); }, false);



use la sabiduría de esta publicación y simplemente obtenga el ancho y el alto del contenedor de su script (ancho y alto de la ventana) ... https://.com/a/9049670/818732

usando esta ventana: target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no solucioné mis problemas en Android AND ios. Tenga en cuenta que target-densitydpi se marcará en TODOS los demás dispositivos pero Android, pero no hará ningún daño. Se asegurará de que nada se escale automáticamente.