2013-03-01 33 views
22

Ho due DIV di cui ho bisogno per conoscere la distanza calcolata del browser (in altezza). Ho letto della funzione di offset ma gli esempi non sono stati scritti per il modo in cui sto provando a farlo.Trova la distanza tra due DIV usando jQuery?

Esempio utilizzo:

<div class="foo"></div> 
<div class="bar"></div> 

voglio sapere la distanza tra questi due.

Please help me per trovare la distanza in modo dinamico con jQuery.

risposta

53

Qualcosa del genere dovrebbe funzionare:

$('.foo').offset().top - $('.bar').offset().top 

Finché ogni classe ha un solo elemento della pagina.
Se non sono univoci, dai ai due elementi un ID e un riferimento.

+0

Non ha funzionato, ma poi ha guardato sotto il tuo codice e questa è stata la ragione! due occorrenze di uno dei DIV. Alla fine, ho dovuto usare un altro metodo. –

+0

Non include la dimensione del bordo in coordinate –

9

Uso .offset():

$('.foo').offset().top - $('.bar').offset().top 
+3

L'esempio usa '.offset.top'. Dovrebbe essere ".offset(). Top". – Axel

0

Questa funzione trova distanza in pixel tra il centro di due elementi, senza jquery:

function distanceBetweenElems(elem1, elem2) { 
    var e1Rect = elem1.getBoundingClientRect(); 
    var e2Rect = elem2.getBoundingClientRect(); 
    var dx = (e1Rect.left+(e1Rect.right-e1Rect.left)/2) - (e2Rect.left+(e2Rect.right-e2Rect.left)/2); 
    var dy = (e1Rect.top+(e1Rect.bottom-e1Rect.top)/2) - (e2Rect.top+(e2Rect.bottom-e2Rect.top)/2); 
    var dist = Math.sqrt(dx * dx + dy * dy); 
    return dist; 
} 

lo uso così:

var target1 = document.querySelector('#foo'); 
var target2 = document.querySelector('#bar'); 
if (distanceBetweenElems(target1,target2)<100){ 
    target1.classList.add('active'); 
} 
+0

Solo una nota - '(e1Rect.left + (e1Rect.right-e1Rect.left)/2)' può essere semplificato a '(e1Rect.left + e1Rect.right)/2' - dopo tutto, il centro è solo la media dei bordi sinistro e destro. –

Problemi correlati