2013-03-01 16 views
22

Mam dwa DIV, które muszę znać obliczona odległość przeglądarki (w wysokości) z nich. Przeczytałem o funkcji przesunięcia, ale przykłady nie zostały napisane w sposób, w jaki próbuję to zrobić.Znajdź odległość między dwoma DIV za pomocą jQuery?

Przykład użycia:

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

Chcę wiedzieć, odległość pomiędzy tymi dwoma.

Proszę mi pomóc w dynamicznym znalezieniu odległości za pomocą jQuery.

Odpowiedz

53

Coś jak to powinno działać:

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

Dopóki każda klasa ma tylko jeden element na stronie.
Jeśli nie są unikatowe, podaj dwóm elementom identyfikator i odniesienie.

+0

Nie działał, ale sprawdzał pod kodem i to był powód! dwa wystąpienia jednego z DIV. W końcu musiałem użyć innej metody. –

+0

Nie obejmuje rozmiaru obramowania we współrzędnych –

9

Zastosowanie .offset():

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

W tym przykładzie użyto '.offset.top'. Powinien to być '.offset(). Top'. – Axel

0

Funkcja ta wyznacza odległość do pikseli pomiędzy środkami dwóch elementów, nie 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; 
} 

go używać tak:

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

Tylko uwaga - '(e1Rect.left + (e1Rect.right-e1Rect.left)/2)' można uprościć do '(e1Rect.left + e1Rect.right)/2' - w końcu centrum jest po prostu średnią lewej i prawej krawędzi. –

Powiązane problemy