Obter a altura e largura da janela de visualização do navegador sem barras de rolagem usando jquery?


97

Como obtenho a altura e a largura da janela de visualização do navegador sem barras de rolagem usando jQuery?

Aqui está o que tentei até agora:

       var viewportWidth = $("body").innerWidth();
       var viewportHeight = $("body").innerHeight();

Esta solução não leva em consideração as barras de rolagem do navegador.


Respostas:


160
$(window).height();
$(window).width();

Mais informações

Usar jQuery não é essencial para obter esses valores, no entanto. Usar

document.documentElement.clientHeight;
document.documentElement.clientWidth;

para obter tamanhos, excluindo barras de rolagem, ou

window.innerHeight;
window.innerWidth;

para obter toda a janela de visualização, incluindo barras de rolagem.

document.documentElement.clientHeight <= window.innerHeight;  // is always true

obrigado Kyle, isso não inclui as barras de rolagem do navegador, certo?
— Yetimwork Beyene

Pelo que entendi, a 'janela de visualização' do navegador é qualquer coisa que possa ser visualizada e, uma vez que a barra de rolagem não pode ter conteúdo, eu presumiria que isso não faz parte do cálculo. No entanto, isso pode mudar dependendo de como os autores do navegador o implementaram.
— Kyle

4
a janela de visualização não significa toda a largura / altura da janela do site, é apenas a janela de visualização, use algo como `` `window.innerHeight; window.innerWidth; `` `
— acidjazz

@Kyle Você está totalmente correto, conforme declarado aqui: w3schools.com/css/css_rwd_viewport.asp A janela de visualização é a área visível do usuário em uma página da web.
— Brad Adams

1
Altura (em pixels) da janela de visualização da janela do navegador, incluindo, se renderizada, a barra de rolagem horizontal. . Fonte: developer.mozilla.org/en-US/docs/Web/API/Window/innerHeight
— marson parulian

36

Não use jQuery, apenas use javascript para o resultado correto:

Isso inclui largura / altura da barra de rolagem:

var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;

alert('viewport width is: '+ windowWidth + ' and viewport height is:' + windowHeight);

Isso exclui a largura / altura da barra de rolagem:

var widthWithoutScrollbar = document.body.clientWidth;
var heightWithoutScrollbar = document.body.clientHeight;

alert('viewport width is: '+ widthWithoutScrollbar + ' and viewport height is:' + heightWithoutScrollbar);


Obrigado, os métodos jQuery innerWidth e innerHeight retornam resultados incorretos.
— jck

console.log (window.innerHeight); console.log (document.body.clientHeight); console.log ($ (janela) .height ()); O último não está correto. Sua solução é melhor para mim. Obrigado.
— Ali

25

Aqui está um JS genérico que deve funcionar na maioria dos navegadores (FF, Cr, IE6 +):

var viewportHeight;
var viewportWidth;
if (document.compatMode === 'BackCompat') {
    viewportHeight = document.body.clientHeight;
    viewportWidth = document.body.clientWidth;
} else {
    viewportHeight = document.documentElement.clientHeight;
    viewportWidth = document.documentElement.clientWidth;
}

isso só funcionou para mim. janela. altura está dando algo que eu não posso calcular como.
— Amit Kumar Gupta

11

Você está usando as chamadas de método incorretas. Uma janela de visualização é a "janela" que se abre no documento: quanto você pode ver e onde.

Usar $(window).height()não fornecerá o tamanho da janela de visualização, mas sim o tamanho da janela inteira, que normalmente é o tamanho do documento inteiro, embora o documento possa ser ainda maior.

Para obter o tamanho do visor real, use window.innerHeighte window.innerWidth.

https://gist.github.com/bohman/1351439

Não use os métodos jQuery, por exemplo $(window).innerHeight(), pois eles fornecem números errados. Eles fornecem a altura da janela, não innerHeight.


9
Quando a janela possui barra de rolagem (adicionada pelo navegador), o window.innerWidthretorna a largura da janela de visualização + a largura da barra de rolagem. o que posso fazer nesta situação?
— Victor,

8

Descrição

O seguinte fornecerá o tamanho da janela de visualização do navegador.

Amostra

$(window).height();   // returns height of browser viewport
$(window).width();   // returns width of browser viewport

Mais Informações


5

Como Kyle sugeriu, você pode medir o tamanho da janela de visualização do navegador do cliente sem levar em conta o tamanho das barras de rolagem dessa forma.

Amostra (dimensões da viewport SEM barras de rolagem)

// First you forcibly request the scroll bars to hidden regardless if they will be needed or not.
$('body').css('overflow', 'hidden');

// Take your measures.
// (These measures WILL NOT take into account scroll bars dimensions)
var heightNoScrollBars = $(window).height();
var widthNoScrollBars = $(window).width();

// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');

Alternativamente, se você deseja encontrar as dimensões da janela de visualização do cliente, levando em consideração o tamanho das barras de rolagem, então este exemplo abaixo é o mais adequado para você.

Primeiro, não se esqueça de definir sua tag de corpo para ter 100% de largura e altura apenas para ter certeza de que a medição é precisa.

body { 
width: 100%; // if you wish to measure the width and take into account the horizontal scroll bar.
height: 100%; // if you wish to measure the height while taking into account the vertical scroll bar.
}

Amostra (dimensões da viewport COM barras de rolagem)

// First you forcibly request the scroll bars to be shown regardless if they will be needed or not.
$('body').css('overflow', 'scroll');

// Take your measures.
// (These measures WILL take into account scroll bars dimensions)
var heightWithScrollBars = $(window).height();
var widthWithScrollBars = $(window).width();

// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');

4

O script $(window).height()funciona bem (mostrando a altura da janela de visualização e não o documento com altura de rolagem), MAS ele precisa que você coloque corretamente a tag doctype em seu documento, por exemplo, estes doctypes:

Para html5: <!doctype html>

para html4 transicional: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Provavelmente o doctype 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, é resolvido de forma satisfatória, e tenho certeza que seus peps evitarão "alterar o estouro de rolagem para oculto e depois de volta", o que é, desculpe, um truque um tanto sujo, especialmente se você não t documente no código para uso futuro do programador.

Além disso, se você está fazendo um script, pode inventar testes para ajudar os programadores em suas bibliotecas, deixe-me inventar alguns:

$(document).ready(function() {
    if(typeof $=='undefined') {
        alert("Error, you haven't called 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");
    } 
});

3
$(document).ready(function() {

  //calculate the window height & add css properties for height 100%

  wh = $( window ).height();

  ww = $( window ).width();

  $(".targeted-div").css({"height": wh, "width": ww});

});

0

Usando jQuery ...

$ (document) .height () & $ (window) .height () retornará os mesmos valores ... a chave é redefinir o preenchimento e a margem do corpo para que você não obtenha rolagem.

<!--

body {
    padding: 0px;
    margin: 0px;
    position: relative;
}

-->

Espero que isto ajude.


0

Eu queria um visual diferente do meu site para tela larga e tela pequena. Fiz 2 arquivos CSS. Em Java eu ​​escolho qual dos 2 arquivos CSS é usado, dependendo da largura da tela. Eu uso a função PHP echocom na echofunção-algum javascript.

meu código na <header>seção do meu arquivo PHP:

<?php
echo "
<script>
    if ( window.innerWidth > 400)
            { document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018.css\" rel=\"stylesheet\" type=\"text/css\">'); }
    else
            { document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018small.css\" rel=\"stylesheet\" type=\"text/css\">'); }
</script>
"; 
?>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.