Estou construindo um site especificamente para dispositivos móveis. Há uma página em particular que é melhor visualizada no modo paisagem.
Existe uma maneira de detectar se o usuário que está acessando essa página está no modo Retrato e, se estiver, exibe uma mensagem informando ao usuário que a página é melhor visualizada no modo paisagem? Se o usuário já estiver visualizando no modo paisagem, nenhuma mensagem será exibida.
Então, basicamente, eu quero que o site detecte a orientação da janela de visualização, se a orientação for Retrato e , em seguida, exiba uma mensagem de alerta informando ao usuário que esta página é melhor visualizada no modo Paisagem .
orientationchange
evento. Ele mostrará a orientação antiga em vez da nova orientação. Esta resposta funciona bem combinada com oorientationchange
evento.Você também pode usar o
window.matchMedia
que eu uso e prefiro, pois se assemelha à sintaxe CSS:Testado no iPad 2.
fonte
David Walsh tem uma abordagem melhor e direta.
Durante essas alterações, a propriedade window.orientation pode mudar. Um valor de 0 significa visualização em retrato, -90 significa que o dispositivo é girado em paisagem para a direita e 90 significa que o dispositivo é girado em paisagem para a esquerda.
http://davidwalsh.name/orientation-change
fonte
Você pode usar CSS3:
fonte
Existem algumas maneiras de fazer isso, por exemplo:
window.orientation
valorinnerHeight
vs.innerWidth
Você pode adaptar um dos métodos abaixo.
Verifique se o dispositivo está no modo retrato
Verifique se o dispositivo está no modo paisagem
Exemplo de uso
Como detecto a mudança de orientação?
fonte
Eu acho que a solução mais estável é usar a tela em vez da janela, porque pode ser tanto paisagem quanto retrato se você redimensionar a janela do navegador no computador desktop.
fonte
Para aplicar todos esses ótimos comentários à minha codificação diária, para continuidade entre todos os meus aplicativos, decidi usar o seguinte no meu código móvel jquery e jquery.
fonte
Não tente consultas fixas de window.orientation (0, 90 etc não significa retrato, paisagem etc):
http://www.matthewgifford.com/blog/2011/12/22/a-misconception-about-window-orientation/
Mesmo no iOS7, dependendo de como você entra no navegador, nem sempre o retrato
fonte
Após algumas experiências, descobri que a rotação de um dispositivo com reconhecimento de orientação sempre aciona o
resize
evento de uma janela do navegador . Portanto, em seu manipulador de redimensionamento, basta chamar uma função como:fonte
Combinei duas soluções e funciona bem para mim.
fonte
Discordo da resposta mais votada. Use
screen
e nãowindow
É a maneira correta de fazer isso. Se você calcular com
window.height
, terá problemas no Android. Quando o teclado está aberto, a janela diminui. Então use a tela em vez da janela.A
screen.orientation.type
é uma boa resposta, mas com o IE. https://caniuse.com/#search=screen.orientationfonte
Obtenha a orientação (a qualquer momento no seu código js) via
Quando
window.orientation
retorna0
ou180
você está no modo retrato , ao retornar90
ou270
então no modo paisagem .fonte
Apenas CCS
Em alguns casos, convém adicionar um pequeno pedaço de código para recarregar a página depois que o visitante girou o dispositivo, para que o CSS seja renderizado corretamente:
fonte
fonte
fonte
Outra alternativa para determinar a orientação, com base na comparação da largura / altura:
Você o usa no evento "redimensionar":
fonte
O iOS não é atualizado
screen.width
escreen.height
quando a orientação muda. O Android não é atualizadowindow.orientation
quando muda.Minha solução para esse problema:
Você pode detectar essa alteração na orientação no Android e no iOS com o seguinte código:
Se o
onorientationchange
evento não for suportado, o evento vinculado será oresize
evento.fonte
Se você possui os navegadores mais recentes,
window.orientation
pode não funcionar. Nesse caso, use o código a seguir para obter o ângulo -Ainda é uma tecnologia experimental, você pode verificar a compatibilidade do navegador aqui
fonte
Obrigado a tobyodavies por guiar o caminho.
Para obter uma mensagem de alerta com base na orientação do dispositivo móvel, é necessário implementar o seguinte script no diretório
function setHeight() {
fonte
Em vez de 270, pode ser -90 (menos 90).
fonte
Isso se expande em uma resposta anterior. A melhor solução que encontrei é criar um atributo CSS inócuo que só aparece se uma consulta de mídia CSS3 for atendida e fazer o teste JS para esse atributo.
Por exemplo, no CSS, você teria:
Você então acessa o JavaScript (estou usando o jQuery para diversão). As declarações de cores podem ser estranhas, então você pode querer usar outra coisa, mas esse é o método mais infalível que eu encontrei para testá-lo. Você pode usar o evento de redimensionamento para ativar a alternância. Coloque tudo junto para:
A melhor parte disso é que, ao escrever esta resposta, ela não parece ter efeito nas interfaces da área de trabalho, pois elas (geralmente) não (parecem) passam nenhum argumento para orientação à página.
fonte
Aqui está o melhor método que encontrei, com base no artigo de David Walsh ( Detectar alterações de orientação em dispositivos móveis )
Explicação:
Window.matchMedia () é um método nativo que permite definir uma regra de consulta de mídia e verificar sua validade a qualquer momento.
Acho útil anexar um
onchange
ouvinte ao valor de retorno desse método. Exemplo:fonte
Eu usei no Android Chrome "A API de orientação da tela"
Para procurar a orientação atual, chame console.log (screen.orientation.type) (e talvez screen.orientation.angle).
Resultados: retrato-primário | retrato-secundário | paisagem primária | paisagem secundária
Abaixo está o meu código, espero que seja útil:
fonte
fonte
O objeto de janela em JavaScript em dispositivos iOS possui uma propriedade de orientação que pode ser usada para determinar a rotação do dispositivo. A seguir, são mostrados os valores window.orientation para dispositivos iOS (por exemplo, iPhone, iPad, iPod) em diferentes orientações.
Esta solução também funciona para dispositivos Android também. Fiz o check-in no navegador nativo do Android (navegador da Internet) e no navegador Chrome, mesmo nas versões antigas.
fonte
É isso que eu uso.
Implementação
fonte
fonte
Existe uma maneira de detectar se o usuário passou o dispositivo para o modo retrato usando
screen.orientation
Basta usar o código abaixo:
Agora,
onchange
será acionado sempre que o usuário virar o dispositivo e o alerta será exibido quando o usuário estiver usando o modo retrato.fonte
Uma coisa a observar
window.orientation
é que ele retornaráundefined
se você não estiver em um dispositivo móvel. Portanto, uma boa função para verificar a orientação pode ser assim, ondex
éwindow.orientation
:Chame assim:
fonte
Ou você pode simplesmente usar isso ..
fonte