2010-08-09 18 views
24

Me gustaría saber si hay un evento DOM para escuchar que me dice cuando un elemento DOM se mueve o se cambia de tamaño en la página. No estoy hablando de elementos que se arrastran/caen. Un ejemplo es si tengo una lista de tres elementos en una página, y uso JS para eliminar uno de los dos primeros elementos de la lista de la página (u ocultarlo o lo que sea), me gustaría adjuntar un controlador para ejecutar cuando el tercer elemento de la lista se mueve hacia arriba en la página.Cómo saber cuándo un elemento DOM se mueve o se redimensiona

Estoy usando jQuery, por lo que las respuestas simples de javascript o jQuery son aceptables.

Quizás no haya eventos de movimiento/posición/cambio de tamaño en el nivel del elemento, así que si hay un evento de nivel de página/documento que me dirá que la página fue repintada y puedo verificar si necesito volver a llamar a una función ?

Antecedentes

puse un div transparente sobre un elemento mientras se realiza una llamada de servicio web para eliminar ese elemento. Como necesito posicionar absolutamente ese div superpuesto, quiero que rastree el elemento que cubre inicialmente. En efecto, lo ancla al elemento base.

Respuesta

12

No se puede obtener una devolución de llamada para el movimiento/cambio de tamaño del elemento en general; tendrías que estar constantemente revisando las dimensiones en un poller de intervalo, lo que lo haría un poco menos receptivo. Puede mejorar esto llamando al verificador en un evento de ventana resize también (y scroll si se trata de desbordamiento o posicionamiento fijo. También puede agregar detectores de eventos de mutación DOM para informarse cuando los elementos se eliminan del árbol de documentos, pero esto no el trabajo en todos los navegadores.

no se puede hacer una superposición con CSS sin formato? por ejemplo. position: relative poner en el elemento que se ha oscurecido, a continuación, añadir la superposición en su interior, con la siguiente?

position: absolute; 
z-index: 10; 
left: 0; 
top: 0; 
width: 100%; 
height: 100%; 
opacity: 0.5; 
+0

Voy a intentar su sugerencia acerca de poner la superposición en el elemento. Además, solo podría funcionar window.resize y window.scroll ... Recordaría todas mis superposiciones. – slolife

+0

Parece que no funciona. Mi elemento base (el elemento que se va a ocultar) es una fila de la tabla (tr). Si establezco su posición = relativa, y agrego mi elemento de superposición ($ overlay.appendTo ($ tr), ¿se ve bien?), Con una posición = absoluta, la superposición llena toda la pantalla. – slolife

+0

Para cambiar el tamaño, consulte aquí: https: // github.com/marcj/css-element-queries –

15

I No creo que esta solución sea relevante después de tanto tiempo, pero existe una excelente solución de navegador basada en los eventos de desbordamiento y desbordamiento presentados here

Para activar nuestra magia escucha de cambio de tamaño, se inyecta un elemento de objeto en el elemento objetivo, establecer una lista de estilos especiales para ocultarlo de la vista, y supervisar si se produce cambio de tamaño - que actúa como un disparador para alertarnos cuando el elemento objetivo padre se redimensiona.

El contenido del elemento <object> tiene un evento nativo resize, solo como una ventana.

+9

Si bien esta respuesta tiene más de un año de antigüedad y el enlace es útil, sería mejor si publica las partes esenciales de la respuesta aquí, en este sitio, o su publicación corre el riesgo de ser eliminada [consulte las preguntas frecuentes donde se mencionan las respuestas que son 'apenas más que un enlace'.] (http://stackoverflow.com/faq#deletion) Puede incluir el enlace si lo desea, pero solo como 'referencia'. La respuesta debería ser independiente sin necesidad del enlace. – Taryn

+0

El método descrito en el artículo se rompe si intenta eliminar el oyente de un elemento que ya se eliminó del DOM (contentDocument es nulo en la línea 60). Una simple comprobación nula debería ayudar, creo. –

Cuestiones relacionadas