Desejo fornecer a meus visitantes a capacidade de ver imagens em alta qualidade. Existe alguma maneira de detectar o tamanho da janela?
Ou melhor ainda, o tamanho da janela de visualização do navegador com JavaScript? Veja a área verde aqui:
javascript
cross-browser
viewport
Alix Axel
fonte
fonte
getComputedStyle
ahtml
tag expandida .Respostas:
Navegador cruzado
@media (width)
e@media (height)
valoreswindow.innerWidth
e.innerHeight
@media (width)
e@media (height)
inclui barras de rolageminitial-scale
variações de zoom e zoom podem fazer com que os valores móveis diminuam incorretamente para o que o PPK chama de viewport visual e sejam menores que os@media
valoresundefined
no IE8-document.documentElement.clientWidth
e.clientHeight
@media (width)
e@media (height)
quando não há barra de rolagemjQuery(window).width()
que o jQuery chama a janela de exibição do navegadorRecursos
matchMedia
para obter dimensões precisas em qualquer unidadefonte
$
porverge
. Se você deseja integrar ao jQuery, façajQuery.extend(verge)
. Veja: verge.airve.com/#static<!DOCTYPE html>
na parte superior da página para que o código funcione.document.documentElement.clientHeight
retorna a altura da página , enquantowindow.innerHeight
retorna a altura da janela de exibição . Grande diferença.Funções de dimensão jQuery
$(window).width()
e$(window).height()
fonte
$(window).height();
retorna 536, enquanto$("html").height();
retorna 10599Você pode usar os window.innerWidth e window.innerHeight propriedades.
fonte
document.documentElement.clientWidth
é mais preciso e tem mais suporte do quewindow.innerWidth
document.documentElement.clientWidth
fornece a largura da janela de visualização, enquanto window.innerWidth fornece a largura do documento. Sim, dessa maneira.Se você não estiver usando o jQuery, ficará feio. Aqui está um trecho que deve funcionar em todos os novos navegadores. O comportamento é diferente no modo Quirks e no modo padrões no IE. Isso cuida disso.
fonte
clientHeight
odocument.documentElement
elemento, que fornecerá o tamanho da viewport. Para obter o tamanho do documento, você precisariadocument.body.clientHeight
. Como explica Chetan, esse comportamento se aplica aos navegadores modernos. É fácil de testar. Basta abrir um console e digitardocument.documentElement.clientHeight
em várias guias abertas.Sei que essa resposta é aceitável, mas tive uma situação em que
clientWidth
que não funcionava, pois o iPhone (pelo menos o meu) retornava 980, não 320, então useiwindow.screen.width
. Eu estava trabalhando no site existente, sendo "responsivo" e necessário forçar navegadores maiores a usar uma meta-viewport diferente.Espero que isso ajude alguém, pode não ser perfeito, mas funciona nos meus testes em iOs e Android.
fonte
Procurei e encontrei uma maneira de navegador cruzado:
fonte
Consegui encontrar uma resposta definitiva em JavaScript: The Definitive Guide, 6th Edition by O'Reilly, p. 391:
Essa solução funciona mesmo no modo Quirks, enquanto a solução atual de ryanve e ScottEvernden não.
exceto pelo fato de eu me perguntar por que a linha
if (document.compatMode == "CSS1Compat")
não estáif (d.compatMode == "CSS1Compat")
, tudo parece bom.fonte
documentElement.clientWidth
não responde à alteração da orientação do dispositivo no iOS. b) exibe contar pixels físicos (praticamente inútil) em vez de pixels virtuaisSe você está procurando uma solução que não seja o jQuery, que fornece valores corretos em pixels virtuais no celular , e você acha isso simples
window.innerHeight
oudocument.documentElement.clientHeight
pode resolver seu problema, estude este link primeiro: https://tripleodeon.com/assets/2011/12/ table.htmlO desenvolvedor fez um bom teste que revela o problema: você pode obter valores inesperados para Android / iOS, paisagem / retrato, telas normais / de alta densidade.
Minha resposta atual ainda não é uma bala de prata (// todo), mas sim um aviso para aqueles que vão copiar e colar rapidamente qualquer solução desse segmento no código de produção.
Eu estava procurando a largura da página em pixels virtuais no celular e descobri que o único código que funciona é (inesperadamente!)
window.outerWidth
. Mais tarde, examinarei esta tabela para obter a solução correta, indicando a altura, excluindo a barra de navegação, quando tiver tempo.fonte
Este código é de http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
NB: para ler a largura, use
console.log('viewport width'+viewport().width);
fonte
Há uma diferença entre
window.innerHeight
edocument.documentElement.clientHeight
. O primeiro inclui a altura da barra de rolagem horizontal.fonte
Uma solução que estivesse em conformidade com os padrões W3C seria criar uma div transparente (por exemplo, dinamicamente com JavaScript), definir sua largura e altura para 100vw / 100vh (unidades de viewport) e obter seu offsetWidth e offsetHeight. Depois disso, o elemento pode ser removido novamente. Isso não funcionará em navegadores mais antigos, porque as unidades de viewport são relativamente novas, mas se você não se importa com elas, mas com os padrões (em breve), você pode definitivamente seguir este caminho:
Obviamente, você também pode definir objNode.style.position = "fixed" e usar 100% como largura / altura - isso deve ter o mesmo efeito e melhorar a compatibilidade em certa medida. Além disso, definir a posição como fixa pode ser uma boa ideia em geral, porque, caso contrário, a div ficará invisível, mas consumirá algum espaço, o que levará a barras de rolagem aparecendo etc.
fonte
É assim que eu faço, tentei no IE 8 -> 10, FF 35, Chrome 40, funcionará muito bem em todos os navegadores modernos (como window.innerWidth está definido) e no IE 8 (sem janela). innerWidth) também funciona bem, qualquer problema (como piscar por causa do estouro: "oculto"), informe-o. Não estou realmente interessado na altura da janela de exibição, pois fiz essa função apenas para solucionar algumas ferramentas responsivas, mas ela pode ser implementada. Espero que ajude, agradeço comentários e sugestões.
fonte