2013-07-13 10 views
11

Se ho elementi HTML come segue:Misura tra i centri degli elementi HTML due

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

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

... come faccio a trovare la distanza tra loro in pixel utilizzando Javascript?

+0

vostro codice non è valido, ma comunque - [Calcola] (http://www.quirksmode.org/js/findpos.html) posizioni assolute degli elementi e utilizzare il [formula] (http : //cs.selu.edu/~rbyrd/math/distance/) per scoprire la distanza. – georg

+0

oh si, mi dispiace ... – tenstar

+0

Non vuoi usare jQuery, vero? –

risposta

22

ottenere le loro posizioni, e utilizzare il teorema di Pitagora per determinare la distanza tra di loro ...

(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.

Il Teorema di Pitagora si riferisce alla relazione tra i lati di un triangolo rettangolo.

Pythagorean Theorem

Gli elementi sono tracciati su un Cartesian coordinate system (con origine nel alto a sinistra), in modo da poter immaginare un triangolo rettangolo tra le coordinate degli elementi (il lato sconosciuto è l'ipotenusa).

È possibile modificare l'equazione per ottenere il valore di c ottenendo la radice quadrata dell'altro lato.

Distance equation

Poi, è sufficiente collegare i valori (la x e y sono le differenze tra gli elementi di una volta i loro centri sono determinati) e troverete la lunghezza dell'ipotenusa, che è la distanza tra la elementi.

+0

Che vale se "posizione" è definita come le coordinate dell'angolo in alto a sinistra. Penso che l'uso del punto centrale sia più accurato. – Amberlamps

+0

@Amberlamps Certo, se questo è ciò che l'OP vuole (non hanno menzionato tale requisito), quindi possono regolarlo (aggiornerò anche la risposta). – alex

+0

la tua risposta attuale indica la distanza tra i 2 centri? – tenstar

0

quanto div sono ora vuote, l'idea di base è quella di misurare la distanza tra loro angoli superiori sinistro

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

ma si deve sottrarre prima altezza div s' e la larghezza, se si mette qualcosa dentro . Questo metodo presenta alcuni problemi con il supporto e la larghezza del bordo degli elementi nei diversi browser.

comunque dare un'occhiata a Fiddle

nota, che anche con i contenuti (se non si cambia con i CSS) div saranno 100 width%, quindi se si vuole semplicemente misurare br 's uso altezza:

distance = = y.offsetTop - x.offsetTop; 
Problemi correlati