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 () {
if(typeof $=='undefined') {
alert("PROGRAMMER'S Error: you haven't called JQuery library");
} else if (typeof $.ui=='undefined') {
alert("PROGRAMMER'S Error: you haven't installed the UI Jquery library");
}
if(document.doctype==null || screen.height < parseInt($(window).height()) ) {
alert("ERROR, check your doctype, the calculated heights are not what you might expect");
}
});
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.