Como uso o jQuery para determinar o tamanho da janela de exibição do navegador e redetectá-la se a página é redimensionada? Eu preciso fazer um tamanho IFRAME nesse espaço (entrando um pouco em cada margem).
Para quem não sabe, a janela de exibição do navegador não é do tamanho do documento / página. É o tamanho visível da sua janela antes da rolagem.
Respostas:
Para obter a largura e a altura da janela de exibição:
redimensionar evento da página:
fonte
innerWidth
/innerHeight
é mais correto de usar (cobrindo o zoom).DOCTYPE
declaração adequada , por exemplo<!DOCTYPE html>
.Você pode tentar unidades de viewport (CSS3):
Suporte do navegador
fonte
1. Resposta à questão principal
O script
$(window).height()
funciona bem (mostrando a altura da janela de exibição e não o documento com altura de rolagem), mas é necessário que você coloque corretamente a tag doctype no seu documento, por exemplo, estes doctypes:Para HTML 5:
<!DOCTYPE html>
Para HTML4 de transição:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Provavelmente, o tipo de documento padrão assumido por alguns navegadores é tal que
$(window).height()
leva a altura do documento e não a altura do navegador. Com a especificação doctype, ela é resolvida de maneira satisfatória e tenho certeza de que as pessoas evitarão a "alteração do deslocamento de rolagem para oculto e depois para trás", o que é, desculpe, um truque sujo, especialmente se você não Não o documente no código para uso futuro do programador.2. Uma dica adicional, observe o seguinte: Além disso, se você estiver criando um script, poderá inventar testes para ajudar os programadores a usar suas bibliotecas, deixe-me inventar algumas:
$ (document) .ready (function () {});EDIT: sobre a parte 2, "Uma dica adicional, observe o lado": @Machiel, no comentário de ontem (04/09/2014), estava UTTERLY certo: a verificação do $ não pode estar dentro do evento ready do Jquery, porque como ele apontou, estamos assumindo que $ já está definido. Obrigado por apontar isso e, por favor, o restante de vocês corrige isso, se você o usou em seus scripts. Minha sugestão é: em suas bibliotecas, coloque uma função "install_script ()" que inicialize a biblioteca (coloque qualquer referência a $ dentro dessa função init, incluindo a declaração de ready ()) e NO INÍCIO dessa função "install_script ()" , verifique se $ está definido, mas torne tudo independente do JQuery, para que sua biblioteca possa "diagnosticar-se" quando o JQuery ainda não estiver definido. Prefiro esse método ao invés de forçar a criação automática de um JQuery trazendo-o de uma CDN. Essas são pequenas notas de lado para ajudar outros programadores. Eu acho que as pessoas que criam bibliotecas devem ser mais ricas no feedback dos possíveis erros do programador. Por exemplo, o Google Apis precisa de um manual para entender as mensagens de erro. Isso é um absurdo, precisar de documentação externa para alguns pequenos erros que não precisam que você procure um manual ou uma especificação. A biblioteca deve ser AUTO-DOCUMENTADA. Eu escrevo código mesmo cuidando dos erros que eu possa cometer daqui a seis meses, e ele ainda tenta ser um código limpo e não repetitivo, já escrito para evitar futuros erros de desenvolvedor. Eu acho que as pessoas que criam bibliotecas devem ser mais ricas no feedback dos possíveis erros do programador. Por exemplo, o Google Apis precisa de um manual para entender as mensagens de erro. Isso é um absurdo, precisar de documentação externa para alguns pequenos erros que não precisam que você procure um manual ou uma especificação. A biblioteca deve ser AUTO-DOCUMENTADA. Eu escrevo código mesmo cuidando dos erros que eu possa cometer daqui a seis meses, e ele ainda tenta ser um código limpo e não repetitivo, já escrito para evitar futuros erros de desenvolvedor. Eu acho que as pessoas que criam bibliotecas devem ser mais ricas no feedback sobre os erros potenciais do programador. Por exemplo, o Google Apis precisa de um manual para entender as mensagens de erro. Isso é um absurdo, precisar de documentação externa para alguns pequenos erros que não precisam que você procure um manual ou uma especificação. A biblioteca deve ser AUTO-DOCUMENTADA. Eu escrevo código mesmo cuidando dos erros que eu possa cometer daqui a seis meses, e ele ainda tenta ser um código limpo e não repetitivo, já escrito para evitar futuros erros de desenvolvedor. você não precisa procurar um manual ou uma especificação. A biblioteca deve ser AUTO-DOCUMENTADA. Eu escrevo código mesmo cuidando dos erros que eu possa cometer daqui a seis meses, e ele ainda tenta ser um código limpo e não repetitivo, já escrito para evitar futuros erros de desenvolvedor. você não precisa procurar um manual ou uma especificação. A biblioteca deve ser AUTO-DOCUMENTADA. Eu escrevo código mesmo cuidando dos erros que eu possa cometer daqui a seis meses, e ele ainda tenta ser um código limpo e não repetitivo, já escrito para evitar futuros erros de desenvolvedor.
fonte
$
depois que você já usou a$
chamada$(document).ready(function() { } );
. É bom verificar se o jQuery está disponível, mas neste momento já é tarde demais.Você pode usar $ (window) .resize () para detectar se a viewport é redimensionada.
O jQuery não possui nenhuma função para detectar consistentemente a largura e altura corretas da janela de exibição [1] quando houver uma barra de rolagem presente.
Encontrei uma solução que usa a biblioteca Modernizr e, especificamente, a função mq, que abre consultas de mídia para javascript.
Aqui está a minha solução:
Minha resposta provavelmente não ajudará a redimensionar um iframe para 100% de largura da janela de visualização com uma margem de cada lado, mas espero que isso forneça consolo para desenvolvedores da Web frustrados com a incoerência do navegador no cálculo da largura e altura da janela de visualização javascript.
Talvez isso possa ajudar com relação ao iframe:
[1] Você pode usar $ (window) .width () e $ (window) .height () para obter um número que será correto em alguns navegadores, mas incorreto em outros. Nesses navegadores, você pode tentar usar o window.innerWidth e o window.innerHeight para obter a largura e a altura corretas, mas eu recomendaria esse método, porque ele dependeria do sniffing do agente do usuário.
Geralmente, os diferentes navegadores são inconsistentes quanto à inclusão ou não da barra de rolagem como parte da largura e altura da janela.
Nota: $ (window) .width () e window.innerWidth variam entre os sistemas operacionais usando o mesmo navegador. Consulte: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
fonte
fonte
Para obter o tamanho da viewport no carregamento e no redimensionamento (com base na resposta do SimaWB):
fonte
Observe que as unidades de viewport CSS3 (vh, vw) não funcionam bem no iOS Quando você rola a página, o tamanho da viewport é de alguma forma recalculado e seu tamanho do elemento que usa as unidades de viewport também aumenta. Então, na verdade, é necessário algum javascript.
fonte