2011-04-19 31 views
5

Cómo detectar la superposición de elementos HTML, mediante JavaScript?¿Cómo detectar la superposición de elementos (superposición) usando JavaScript?

Tengo una lista de artículos (<ul>). Se desliza hacia arriba y hacia abajo usando JavaScript. Cuando se desliza hacia abajo, dependiendo del número de elementos, puede superponerse con el otro elemento (<div>), que está en su posición absoluta en este momento (se puede cambiar).

¿Cómo puedo detectar, cuando se superpone <ul> este <div>, para aplicar el nuevo estilo a la <div> para ocultarlo temporal o para mover hacia abajo un poco, para evitar la superposición?
Es que no ve bien, cuando se superponen))

Aquí se puede ver, lo que estoy hablando: http://timetable.raj.fvds.ru/

Muchas gracias!

+0

Si tiene elementos completamente posicionados, entonces no es trivial: necesita calcular la posición de cada elemento, etc. y actuar en consecuencia. Tal vez deberías considerar lograr el mismo efecto sin absolutos, tal vez una mezcla de flotadores (flotante: izquierda) y absolutos (posición: absoluta) dentro de los parientes (posición: relativa). – Andris

Respuesta

9
function isObjOnObj(a,b){ 
    var al = a.left; 
    var ar = a.left+a.width; 
    var bl = b.left; 
    var br = b.left+b.width; 

    var at = a.top; 
    var ab = a.top+a.height; 
    var bt = b.top; 
    var bb = b.top+b.height; 

    if(bl>ar || br<al){return false;}//overlap not possible 
    if(bt>ab || bb<at){return false;}//overlap not possible 

    if(bl>al && bl<ar){return true;} 
    if(br>al && br<ar){return true;} 

    if(bt>at && bt<ab){return true;} 
    if(bb>at && bb<ab){return true;} 

    return false; 
} 
+1

Um ... Si eso es pseudo-código, claro. Necesitas verificar la posición de todos los 'offsetParent's, obtener el' offsetWidth', 'offsetHeight', etc ... –

0

¿Por qué no simplemente elevar el índice z de su UL para estar por encima del div en la parte inferior?

complemento:

#wrap { 
    z-index : 2; 
    position : relative; 
} 
+0

Ya lo intenté. Se ve terrible) – Feniks502

0

Esto se siente como detección de colisiones, y no hay una solución justa publicado. En su lugar, sugeriría calcular cuántos elementos de la lista se necesitarían para que un menú se superponga (es decir, 10), y ocultar el div cuando se seleccionen esos menús (con 10 li).

+0

Es imposible, en páginas de sitios diferentes cantidad de elementos de la lista y su contenido es diferente, por lo que en algunas páginas la lista de elementos ocupa mucho lugar. – Feniks502

+0

El contenido de los elementos de la lista o la página? Si los elementos de la lista son uniformes en altura, entonces aún se puede resolver que 10 elementos se superpondrán a 'div' en' top: 100px', por lo tanto, 5 elementos se superponen 'top: 50px', etc. Escribirá una función para tomar la cantidad de elementos y la posición del 'div ', y decida si ocultarlos o no. ¿O me estoy perdiendo algo? – oblig

+0

Heh. Podría factorizar el ancho de la ventana actual en la ecuación para cuando se ajusten los elementos de la lista. (Y, por supuesto, el tamaño del texto y la longitud del texto.) ¿Cuál es su pensamiento actual? – oblig