2011-11-17 13 views
13

¿Hay alguna manera de indicar con fiabilidad el ancho de la ventana del navegador que incluye la barra de desplazamiento, pero no el resto de la ventana del navegador?Cómo obtener de forma confiable el ancho de la pantalla CON la barra de desplazamiento

Ninguna de las propiedades que figuran here me dicen el ancho de la pantalla, incluyendo la barra de desplazamiento (si existe)

+0

¿Por qué necesita el ancho con la barra de desplazamiento incluida? Sin mencionar que algunos navegadores también tienen bordes de 1 a 4 píxeles en los lados izquierdo y derecho de la ventana gráfica. Ni siquiera entiendo por qué las personas necesitarían 'outerWidth' y' outerHeight' ... – animuson

+0

@animuson: establezco el ancho de algunos elementos dinámicamente, y dependiendo de la forma en que un navegador muestre el diseño (versión, tamaño de pantalla, etc.), a veces hay una barra de desplazamiento que luego desaparece dejándome con una "sombra de barra de desplazamiento" en la página. Sería mucho más simple si supiera el ancho SIN la barra de desplazamiento antes de tiempo. – Goro

+0

Ver también http://stackoverflow.com/q/8339377/1136253 –

Respuesta

5

Mientras el cuerpo esté al 100%, document.body.scrollWidth funcionará.

Demostración: http://jsfiddle.net/ThinkingStiff/5j3bY/

HTML:

<div id="widths"></div> 

CSS:

body, html 
{ 
margin: 0; 
padding: 0; 
width: 100%; 
} 

div 
{ 
height: 1500px; 
} 

Guión:

var widths = 'viewport width (body.scrollWidth): ' 
    + document.body.scrollWidth + '<br />' 
    + 'window.innerWidth: ' + window.innerWidth + '<br />'; 

document.getElementById('widths').innerHTML = widths; 

puse un div de altura en la demo para forzar un desplazamiento bar.

+0

Esto no parece consistente. El JSFiddle me da body.scrollWidth: 580, window.innerWidth: 588. Agregaré mi propia solución a este hilo. – YoYoYonnY

+0

@YoYoYonnY Creo que esto puede ser un problema de iFrame con JSFiddle. Déjame saber lo que encuentres. – ThinkingStiff

+0

la probrema persiste con Ubuntu Chrome: 'document.body.scrollWidth: 1351, window.innerWidth: 1366' – YoYoYonnY

0

Con jQuery se puede calcular el ancho de barra de desplazamiento del navegador por conseguir la diferencia de anchura cuando overflow: hidden se establece y overflow: scroll se establece . La diferencia de ancho será el tamaño de la barra de desplazamiento.

Aquí hay un simple example que muestra cómo se puede hacer esto.

+0

Vi muchos ejemplos de eso en la web, pero fui cauteloso porque parecía que si había un conflicto con alguna otra hoja de estilo en la página, podría no dar el resultado correcto. – Goro

+0

seguro que debes probar si funciona correctamente para tu página.y como mencionó ThinkingStiff, es importante establecer el ancho del cuerpo al 100%. – Fabian

6

Supongo que quiere saber el ancho de la ventana gráfica con la barra de desplazamiento incluida, porque la pantalla en sí misma no tiene una barra de desplazamiento. De hecho, el ancho y la altura de la pantalla serán la resolución de la pantalla de la computadora, por lo que no estoy seguro de lo que quiere decir con el ancho de la pantalla con la barra de desplazamiento.

Sin embargo, la ventana donde solo se presenta la página (y las barras de desplazamiento), es decir, sin menús del navegador, sin marcadores o lo que sea, solo la página representada, es donde puede estar presente dicha barra de desplazamiento.

Suponiendo que lo desee, puede medir el tamaño de la ventana del navegador del cliente teniendo en cuenta el tamaño de las barras de desplazamiento de esta manera.

Primero no olvide configurar su etiqueta de cuerpo para que sea del 100% de ancho y alto solo para asegurarse de que la medición sea precisa.

body { 
width: 100%; 
// if you wish to also measure the height don't forget to also set it to 100% just like this one. 
} 

A continuación puede medir el ancho a voluntad.

Muestra

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

// Viewport width with scroll bar. 
var widthWithScrollBars = $(window).width(); 

// Now if you wish to know how many pixels the scroll bar actually has 
// Set the overflow css property to forcibly hide the scroll bar. 
$('body').css('overflow', 'hidden'); 

// Viewport width without scroll bar. 
var widthNoScrollBars = $(window).width(); 

// Scroll bar size for this particular client browser 
var scrollbarWidth = widthWithScrollBars - widthNoScrollBars; 

// Set the overflow css property back to whatever value it had before running this code. (default is auto) 
$('body').css('overflow', 'auto'); 

espero que ayude.

8

me di cuenta de cómo obtener con precisión la anchura de la ventana gráfica Con la barra de desplazamiento usando un código de: http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript

poner esto dentro de su $(document).ready(function()

$(document).ready(function(){ 
    $(window).on("resize", function(){ 
     function viewport() { 
      var e = window, a = 'inner'; 
      if (!('innerWidth' in window)) { 
       a = 'client'; 
       e = document.documentElement || document.body; 
      } 
      return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }; 
     } 
    }); 
    // Get the correct window sizes with these declarations 
    windowHeight = viewport().height; 
    windowWidth = viewport().width; 
}); 

lo que hace:

Cuando su página está 'lista' o cambia de tamaño, la función calcula la altura y el ancho correctos de la ventana (includ ing scrollbar).

0

Usted puede obtener el ancho de la ventana con la barra de desplazamiento, de esa manera:

function scrollbar_width() { 
      if (jQuery('body').height() > jQuery(window).height()) { 

       /* Modified from: http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php */ 
       var calculation_content = jQuery('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>'); 
       jQuery('body').append(calculation_content); 
       var width_one = jQuery('div', calculation_content).innerWidth(); 
       calculation_content.css('overflow-y', 'scroll'); 
       var width_two = jQuery('div', calculation_content).innerWidth(); 
       jQuery(calculation_content).remove(); 
       return (width_one - width_two); 
      } 
      return 0; 
     } 
1

Actualmente el nuevo vw y vh Las propiedades de css3 mostrarán el tamaño completo, incluida la barra de desplazamiento.

body { width:100vw; height:100vh; }

Hay una cierta discusión en línea si se trata de un error o no.

1

no hay nada después de barra de desplazamiento por lo que "resto de la ventana" es qué?

Pero sí, una forma de hacerlo es hacer otra envoltura div en el cuerpo donde todo va y el cuerpo tiene overflow:none; height:100%; width:100%;, envoltura div también tiene también un 100% de ancho y alto. y desbordamiento para desplazarse. TAN AHORA ... la anchura del envoltorio sería el ancho de la ventana gráfica

Ver Ejemplo: http://jsfiddle.net/techsin/8fvne9fz/

html,body { 
    height: 100%; 
    overflow: hidden; 
} 

.wrapper { 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
} 
0

Ésta es mi solución para la eliminación de la 'sombra barra de desplazamiento', porque no funcionó scrollWidth para mí:

canvas.width = element.offsetWidth; 
canvas.height = element.offsetHeight; 
canvas.width = element.offsetWidth; 
canvas.height = element.offsetHeight; 

Es fácil, pero funciona. Asegúrese de agregar un comentario que explique por qué asigna el mismo valor dos veces :)

Cuestiones relacionadas