O comportamento real em diferentes dispositivos é inconsistente . Os eventos redimensionar e guidanceChange podem ser disparados em uma sequência diferente com frequência variável. Além disso, alguns valores (por exemplo, screen.width e window.orientation) nem sempre mudam quando você espera. Evite screen.width - ele não muda ao girar no iOS.
A abordagem confiável é ouvir os eventos de redimensionamento e de orientação e alterar (com algumas pesquisas como uma captura de segurança) e, eventualmente, você obterá um valor válido para a orientação. Nos meus testes, os dispositivos Android ocasionalmente falham em disparar eventos ao girar 180 graus, por isso também incluí um setInterval para pesquisar a orientação.
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);
Aqui estão os resultados dos quatro dispositivos que testei (desculpe pela tabela ASCII, mas parecia a maneira mais fácil de apresentar os resultados). Além da consistência entre os dispositivos iOS, há muita variedade entre os dispositivos. NOTA: Os eventos são listados na ordem em que foram disparados.
| =================================================== ============================= |
| Dispositivo | Eventos demitidos | orientação | innerWidth | screen.width |
| =================================================== ============================= |
| iPad 2 | redimensionar | 0 1024 768
| (para paisagem) | mudança de orientação | 90 1024 768
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPad 2 | redimensionar | 90 768 768
| (para retrato) | mudança de orientação | 0 768 768
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | redimensionar | 0 480 320
| (para paisagem) | mudança de orientação | 90 480 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | redimensionar | 90 320 320
| (para retrato) | mudança de orientação | 0 320 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Telefone droid | mudança de orientação | 90 320 320
| (para paisagem) | redimensionar | 90 569 569
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Telefone droid | mudança de orientação | 0 569 569
| (para retrato) | redimensionar | 0 320 320
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | mudança de orientação | 0 400 400
| Tablet | mudança de orientação | 90 400 400
| (para paisagem) | mudança de orientação | 90 400 400
| | redimensionar | 90 683 683
| | mudança de orientação | 90 683 683
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | mudança de orientação | 90 683 683
| Tablet | mudança de orientação | 0 683 683
| (para retrato) | mudança de orientação | 0 683 683
| | redimensionar | 0 400 400
| | mudança de orientação | 0 400 400
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |