El comportamiento real en diferentes dispositivos es inconsistente . Los eventos de cambio de tamaño y orientación pueden activarse en una secuencia diferente con frecuencia variable. Además, algunos valores (por ejemplo, screen.width y window.orientation) no siempre cambian cuando lo espera. Evite screen.width : no cambia al rotar en iOS.
El enfoque confiable es escuchar los eventos de cambio de tamaño y orientación ( cambiar algunas encuestas como captura de seguridad), y finalmente obtendrá un valor válido para la orientación. En mis pruebas, los dispositivos Android ocasionalmente no disparan eventos cuando giran 180 grados completos, por lo que también he incluido un setInterval para sondear la orientación.
var previousOrientation = window.orientation;
var checkOrientation = function(){
if(window.orientation !== previousOrientation){
previousOrientation = window.orientation;
// orientation changed, do your magic here
}
};
window.addEventListener("resize", checkOrientation, false);
window.addEventListener("orientationchange", checkOrientation, false);
// (optional) Android doesn't always fire orientationChange on 180 degree turns
setInterval(checkOrientation, 2000);
Aquí están los resultados de los cuatro dispositivos que he probado (perdón por la tabla ASCII, pero parecía la forma más fácil de presentar los resultados). Además de la coherencia entre los dispositivos iOS, existe una gran variedad entre los dispositivos. NOTA: Los eventos se enumeran en el orden en que se dispararon.
| ================================================= ============================= |
El | Dispositivo | Eventos despedidos | orientación | innerWidth | ancho de pantalla |
| ================================================= ============================= |
El | iPad 2 | cambiar el tamaño | 0 | 1024 | 768
El | (al paisaje) | cambio de orientación | 90 1024 | 768
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | iPad 2 | cambiar el tamaño | 90 768 768
El | (al retrato) | cambio de orientación | 0 | 768 768
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | iPhone 4 | cambiar el tamaño | 0 | 480 320
El | (al paisaje) | cambio de orientación | 90 480 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | iPhone 4 | cambiar el tamaño | 90 320 320
El | (al retrato) | cambio de orientación | 0 | 320 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | Teléfono droide | cambio de orientación | 90 320 320
El | (al paisaje) | cambiar el tamaño | 90 569 569
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | Teléfono droide | cambio de orientación | 0 | 569 569
El | (al retrato) | cambiar el tamaño | 0 | 320 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | Samsung Galaxy | cambio de orientación | 0 | 400 | 400 |
El | Tableta | cambio de orientación | 90 400 | 400 |
El | (al paisaje) | cambio de orientación | 90 400 | 400 |
El | El | cambiar el tamaño | 90 683 683
El | El | cambio de orientación | 90 683 683
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
El | Samsung Galaxy | cambio de orientación | 90 683 683
El | Tableta | cambio de orientación | 0 | 683 683
El | (al retrato) | cambio de orientación | 0 | 683 683
El | El | cambiar el tamaño | 0 | 400 | 400 |
El | El | cambio de orientación | 0 | 400 | 400 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |