Tengo un div con una altura fija y overflow:hidden;
Quiero verificar con jQuery si el div tiene elementos que se desbordan más allá de la altura fija del div. ¿Cómo puedo hacer esto?
javascript
jquery
html
Justin Meltzer
fuente
fuente
Respuestas:
En realidad, no necesita ningún jQuery para verificar si hay un desbordamiento o no. El uso de
element.offsetHeight
,element.offsetWidth
,element.scrollHeight
yelement.scrollWidth
se puede determinar si el elemento tiene contenido más grande que su tamaño:Ver ejemplo en acción: Fiddle
Pero si desea saber qué elemento dentro de su elemento es visible o no, entonces necesita hacer más cálculos. Hay tres estados para un elemento hijo en términos de visibilidad:
Si desea contar elementos semi-visibles, sería el script que necesita:
Y si no desea contar semi-visible, puede calcular con una pequeña diferencia.
fuente
<p>
es un elemento de nivel de bloque y ocupa un 100% de ancho. Si desea probar esto con la cantidad de texto dentro de la p simplemente hagap{display:inline}
. De esta manera, el texto interior determina el ancho dep
.Tenía la misma pregunta que el OP, y ninguna de esas respuestas se ajustaba a mis necesidades. Necesitaba una condición simple, para una necesidad simple.
Aquí está mi respuesta:
Además, puede cambiar
scrollWidth
porscrollHeight
si necesita probar cualquiera de los casos.fuente
Entonces utilicé la biblioteca jquery desbordante: https://github.com/kevinmarx/overflowing
Después de instalar la biblioteca, si desea asignar la clase
overflowing
a todos los elementos desbordados, simplemente ejecute:Esto le dará a la clase
overflowing
, como<div class="targetElement overflowing">
a todos los elementos que se desbordan. Luego, puede agregar esto a algún controlador de eventos (clic, mouseover) u otra función que ejecute el código anterior para que se actualice dinámicamente.fuente
Parcialmente basado en la respuesta de Mohsen (la primera condición adicional cubre el caso donde el niño está oculto antes que el padre):
Entonces solo haz:
fuente
Un método es verificar scrollTop contra sí mismo. Dele al contenido un valor de desplazamiento mayor que su tamaño y luego verifique si su scrollTop es 0 o no (si no es 0, se ha desbordado).
http://jsfiddle.net/ukvBf/
fuente
En inglés simple: Obtenga el elemento padre. Verifique su altura y guarde ese valor. Luego recorra todos los elementos secundarios y verifique sus alturas individuales.
Esto está sucio, pero puede tener la idea básica: http://jsfiddle.net/VgDgz/
fuente
Aquí hay una solución jQuery pura, pero es bastante desordenada:
fuente
Esta es la solución jQuery que funcionó para mí.
offsetWidth
etc. no funcionó.Si esto no funciona, asegúrese de que el elemento primario de los elementos tenga el ancho deseado (personalmente, tuve que usarlo
parent().parent())
.position
Es relativo al elemento primario. También lo he incluidoextra_width
porque mis elementos ("etiquetas") contienen imágenes que requieren poco tiempo para carga, pero durante la llamada a la función tienen ancho cero, lo que estropea el cálculo. Para evitarlo, utilizo el siguiente código de llamada:Espero que esto ayude.
fuente
Lo arreglé agregando otro div en el que se desborda. Luego comparas las alturas de los 2 divs.
y el js
Esto parece más fácil ...
fuente