Atualização para 2017
Minha resposta original foi escrita em 2009. Embora ainda funcione, eu gostaria de atualizá-la para 2017. Os navegadores ainda podem se comportar de maneira diferente. Confio na equipe do jQuery para fazer um ótimo trabalho na manutenção da consistência entre navegadores. No entanto, não é necessário incluir a biblioteca inteira. Na fonte jQuery, a parte relevante é encontrada na linha 37 de Dimensions.js . Aqui é extraído e modificado para funcionar de forma independente:
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
Resposta original
Como todos os navegadores se comportam de maneira diferente, primeiro você precisa testar os valores e depois usar o correto. Aqui está uma função que faz isso por você:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
e da mesma forma para altura:
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
Chame esses dois em seus scripts usando getWidth()
ou getHeight()
. Se nenhuma das propriedades nativas do navegador estiver definida, ele retornará undefined
.
self.innerWidth 423
, consultedocument.documentElement.clientWidth 326
edocument.body.clientWidth 406
. Nesse caso, pergunta: qual é o correto e qual usar? Por exemplo, eu quero redimensionar o google map. 326 ou 423 grande diferença. Se a largura ~ 700, em seguida, ver 759, 735, 742 (não tão grande diferença)var pageWidth = Math.max(self.innerWidth || 0, document.documentElement.clientWidth || 0, document.body.clientWidth || 0);
evar windowWidth = self.innerWidth || -1;
// por causa de "corpo" ou "tela" ou "documento" não são a "janela" se você verificar um conteúdo transbordado de html, poderá entender. # i.stack.imgur.com/6xPdH.pnggetWidth()
referênciasself.innerHeight
É um pé no saco . Eu recomendo ignorar o absurdo e usar o jQuery , o que permite fazer isso
$(window).width()
.fonte
Ambos retornam números inteiros e não requerem jQuery. Compatível com vários navegadores.
Costumo encontrar jQuery retorna valores inválidos para width () e height ()
fonte
Por que ninguém menciona a matchMedia?
Não testou muito, mas testou com os navegadores padrão Android e Chrome Chrome, Chrome Desktop, até agora parece que funciona bem.
Obviamente, ele não retorna valor numérico, mas retorna booleano - se corresponde ou não, portanto, pode não se encaixar exatamente na pergunta, mas é isso que queremos de qualquer maneira e provavelmente o autor da pergunta deseja.
fonte
Desde o W3schools e seu navegador cruzado, até a idade das trevas do IE!
fonte
Aqui está uma versão mais curta da função apresentada acima:
fonte
Uma solução adaptada para a resposta moderna de JS de Travis:
fonte
Uma adição importante à resposta de Travis; você precisa colocar o getWidth () no corpo do documento para garantir que a largura da barra de rolagem seja contada; caso contrário, a largura da barra de rolagem do navegador subtraída de getWidth (). O que eu fiz ;
e chame a variável aWidth em qualquer lugar posteriormente.
fonte