Tengo un div que contiene algo de contenido que se agrega y elimina dinámicamente, por lo que su altura cambia con frecuencia. También tengo un div que está absolutamente ubicado directamente debajo de javascript, por lo que, a menos que pueda detectar cuándo cambia la altura del div, no puedo reposicionar el div debajo de él.
Entonces, ¿cómo puedo detectar cuándo cambia la altura de ese div? Supongo que hay algún evento jQuery que necesito usar, pero no estoy seguro de a cuál conectar.
javascript
jquery
Bob Somers
fuente
fuente
Respuestas:
Use un sensor de cambio de tamaño de la biblioteca css-element-queries:
https://github.com/marcj/css-element-queries
Utiliza un enfoque basado en eventos y no pierde el tiempo de su CPU. Funciona en todos los navegadores incl. IE7 +.
fuente
En algún momento escribí un complemento para Attrchange listener que básicamente agrega una función de escucha en el cambio de atributos. Aunque lo digo como un complemento, en realidad es una función simple escrita como un complemento jQuery ... así que si quieres ... elimina el código específico del complemento y usa las funciones principales.
Nota: Este código no usa sondeo
echa un vistazo a esta simple demostración http://jsfiddle.net/aD49d/
Página de complemento: http://meetselva.github.io/attrchange/
Versión minificada: (1.68kb)
fuente
Puede usar el evento DOMSubtreeModified
Pero esto se disparará incluso si las dimensiones no cambian, y reasignar la posición cada vez que se dispare puede tener un impacto en el rendimiento. En mi experiencia al usar este método, verificar si las dimensiones han cambiado es menos costoso y, por lo tanto, podría considerar combinar los dos.
O si está alterando directamente el div (en lugar de que el div sea alterado por la entrada del usuario de maneras impredecibles, como si es contentEditable), simplemente puede disparar un evento personalizado siempre que lo haga.
Desventaja: IE y Opera no implementan este evento.
fuente
Así es como recientemente manejé este problema:
Sé que llego unos años tarde a la fiesta, solo creo que mi respuesta puede ayudar a algunas personas en el futuro, sin tener que descargar ningún complemento.
fuente
Puedes usar la
MutationObserver
clase.MutationObserver
proporciona a los desarrolladores una forma de reaccionar a los cambios en un DOM. Está diseñado como un reemplazo para los eventos de mutación definidos en la especificación de eventos DOM3.Ejemplo ( fuente )
fuente
Hay un complemento jQuery que puede manejar esto muy bien
http://www.jqui.net/jquery-projects/jquery-mutate-official/
Aquí hay una demostración con diferentes escenarios sobre cuándo cambia la altura, si cambia el tamaño del div con borde rojo.
http://www.jqui.net/demo/mutate/
fuente
setTimeout
, por lo que sería 1 ms + [el tiempo que lleva hacer las comprobaciones] en resumen, pero la idea era escuchar constantemente, una vez que lo hiciste volver a activarlo, es como una fila. Estoy seguro de que podría hacerlo mucho mejor, pero no mucho tiempo.En respuesta a user007:
Si la altura de su elemento está cambiando debido a los elementos que se le agregan usando,
.append()
no debería necesitar detectar el cambio de altura. Simplemente agregue la reposición de su segundo elemento en la misma función donde está agregando el nuevo contenido a su primer elemento.Como en:
Ejemplo de trabajo
fuente
Puede hacer un simple setInterval.
EDITAR:
Este es un ejemplo con una clase. Pero puedes hacer algo más fácil.
fuente
Puede usar esto, pero solo es compatible con Firefox y Chrome.
fuente
Bastante básico pero funciona:
fuente