2013-07-13 12 views
11

Wenn ich HTML-Elemente haben, wie folgt:Messen Sie den Abstand zwischen zwei HTML-Elemente Zentren

<div id="x"></div> 

<div id="y" style="margin-left:100px;"></div> 

... wie finde ich den Abstand zwischen ihnen in Pixeln mit JavaScript?

+0

Markup ist ungültig, aber dennoch - [berechnen] (http://www.quirksmode.org/js/findpos.html) absolute Positionen der Elemente und mit dem [formula] (http : //cs.selu.edu/~rbyrd/math/distance/), um die Entfernung zu ermitteln. – georg

+0

oh ja, tut mir leid ... – tenstar

+0

Sie möchten nicht jQuery verwenden, oder? –

Antwort

22

ihre Positionen holen, und den Satz des Pythagoras verwenden, um die Distanz zwischen ihnen ...

(function() { 

    var getPositionAtCenter = function (element) { 
     var data = element.getBoundingClientRect(); 
     return { 
      x: data.left + data.width/2, 
      y: data.top + data.height/2 
     }; 
    }; 

    var getDistanceBetweenElements = function(a, b) { 
     var aPosition = getPositionAtCenter(a); 
     var bPosition = getPositionAtCenter(b); 

     return Math.sqrt(
      Math.pow(aPosition.x - bPosition.x, 2) + 
      Math.pow(aPosition.y - bPosition.y, 2) 
     ); 
    }; 

    var distance = getDistanceBetweenElements(document.getElementById("x"), 
               document.getElementById("y")); 

})(); 

jsFiddle zu bestimmen.

Der Satz des Pythagoras bezieht sich auf die Beziehung zwischen den Seiten eines rechtwinkligen Dreiecks.

Pythagorean Theorem

Die Elemente werden auf einem Cartesian coordinate system (mit Ursprung in oben links) aufgetragen, so dass man ein rechtwinkliges Dreieck zwischen den Koordinaten Elemente vorstellen kann (die unbekannte Seite ist die Hypotenuse).

Sie können die Gleichung ändern, um den Wert c zu erhalten, indem Sie die Quadratwurzel der anderen Seite erhalten.

Distance equation

Dann stecken Sie einfach die Werte in (der x und y sind die Unterschiede zwischen den Elementen, sobald ihre Zentren bestimmt) und Sie erhalten die Länge der Hypotenuse, zu finden ist der Abstand zwischen den ist Elemente.

+0

Das gilt, wenn "Position" als Koordinaten der linken oberen Ecke definiert ist. Ich denke, die Verwendung des Mittelpunkts ist genauer. – Amberlamps

+0

@Amberlamps Sicher, wenn das das OP will (sie haben diese Anforderung nicht erwähnt), dann können sie es anpassen (ich werde die Antwort auch aktualisieren). – alex

+0

gibt Ihre aktuelle Antwort die Entfernung zwischen den 2 Zentren?Kein – tenstar

0

bis divs jetzt leer sind, ist die Grundidee, den Abstand zwischen den linken oberen Ecken

distX = y.offsetLeft - x.offsetLeft; 
distY = y.offsetTop - x.offsetTop; 
distance = Math.sqrt(distX*distX + distY*distY); 
alert(Math.floor(distance)); 

aber Sie müssen subtrahieren erste div ‚s Höhe und Breite zu messen, wenn Sie etwas nach innen setzen . Diese Methode hat einige Probleme mit der Unterstützung und Rahmenbreite von Elementen in verschiedenen Browsern.

nehmen trotzdem einen Blick auf Fiddle

Hinweis, dass auch mit Inhalt (wenn Sie es nicht mit CSS ändern) divs Breite von 100% sein wird, wenn Sie also nur br ‚s messen wollen Höhe:

distance = = y.offsetTop - x.offsetTop; 
Verwandte Themen