scrollheight outerheight innerheight div javascript jquery html css internet-explorer-8

javascript - outerheight - scrolltop



jQuery.height() que emite el mismo valor que.scrollHeight en div con overflow: auto(IE8) (3)

Después de enrutar alrededor de muchas otras preguntas, no encontré una respuesta que corrige mi problema.

Estoy escribiendo un guión para descubrir si el div se está desbordando. Pero al intentar recuperar la altura visible con jQuery.height() , jQuery.innerHeight() o JavaScripts offsetHeight . Se me ha dado el valor de todo el div (incluida la parte que se desborda), es decir, el mismo valor que scrollHeight.

El estilo que contiene DIVs:

{ overflow-x: hidden; overflow-y: auto; width: 73%; bottom: 0px; float: left; height: 100%; top: 0px; }

He creado una maqueta del escenario en jsFiddle: http://jsfiddle.net/Lukedturnbull/L2bxmszv/3/ (Asegúrese de hacer que la pantalla de vista previa sea más pequeña para crear la barra de desplazamiento)


Ahora he encontrado una solución para mi problema, aunque no entiendo completamente por qué lo está haciendo.

Esto no es HTML y código que he escrito y simplemente estaba escribiendo una corrección para ver si aparece la barra de desplazamiento. Pero descubrí que obtener ScrollHeight y Height del padre del contenedor resolvió mi problema. Comparando para ver si el scrollHeight es mayor que la altura, me permitió resolver el problema.


La barra de desplazamiento que está viendo se encuentra realmente en el elemento .structureContent y no en .content . Esta es la razón .content cual .content devuelve todo el mismo valor. .content no está truncado.


Todo parece estar bien, jQuery.height() y jQuery.innerHeight() no tienen nada que ver con la propiedad de desbordamiento. Devolverán alturas, no solo la parte visible.

Si desea conocer la altura del contenido, debe usar scrollHeight . Este scrollHeight es una propiedad regular de javascript que no tiene que usar jQuery

document.getElementById("wrapper").scrollHeight;

O puede usar el selector jQuery

$(''#wrapper'')[0].scrollHeight;

Ver el jsfiddle de trabajo: http://jsfiddle.net/scgz7an5/1/

Darse cuenta de

$(''#wrapper'').scrollHeight;

devuelve indefinido.

ACTUALIZAR

Olvidaste la parte más importante de los elementos flotantes. Te olvidaste de limpiarlos.

Echa un vistazo a este jsfiddle, es una edición tuya pero con elementos flotantes borrados. Ahí puede ver diferentes valores para scrollHeight y jQuery.height() . Observe que .structureContent es el que tiene la barra de desplazamiento, no .content ni .width100 .

.structureContent tiene overflow:auto y la barra de desplazamiento que ve proviene de él.

http://jsfiddle.net/L2bxmszv/5/

Agregué esta clase para borrar tus elementos flotantes.

.clearfix:before, .clearfix:after, { content: ''/0020''; display: block; overflow: hidden; visibility: hidden; width: 0; height: 0; } .clearfix:after { clear: both; } .clearfix { zoom: 1; }

El resultado fue esto:

.content 324 for scrollHeight 324 for clientHeight 324 for jQuery.height() .structureContent 324 for scrollHeight 276 for clientHeight 276 for jQuery.height()

Vea un excelente artículo sobre elementos flotantes y elimínelos aquí: http://css-tricks.com/all-about-floats/