2013-07-13 41 views
11

Nếu tôi có các phần tử HTML như sau:Đo khoảng cách giữa các trung tâm yếu tố hai HTML

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

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

... làm thế nào để tìm ra khoảng cách giữa chúng bằng pixel sử dụng JavaScript?

+0

đánh dấu của bạn không hợp lệ, tuy nhiên - [tính toán] (http://www.quirksmode.org/js/findpos.html) vị trí tuyệt đối của các phần tử và sử dụng [công thức] (http : //cs.selu.edu/~rbyrd/math/distance/) để tìm ra khoảng cách. – georg

+0

oh vâng, xin lỗi ... – tenstar

+0

Bạn không muốn sử dụng jQuery, phải không? –

Trả lời

22

Nhận vị trí của họ, và sử dụng Định lý Pythagore để xác định khoảng cách giữa chúng ...

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

Định lý Pythagore liên quan đến mối quan hệ giữa các cạnh của tam giác vuông góc bên phải.

Pythagorean Theorem

Các yếu tố được vẽ trên một Cartesian coordinate system (có nguồn gốc ở phía trên bên trái), vì vậy bạn có thể tưởng tượng một tam giác vuông góc giữa tọa độ của các yếu tố (bên chưa biết là cạnh huyền).

Bạn có thể sửa đổi phương trình để lấy giá trị c bằng cách lấy căn bậc hai của phía bên kia.

Distance equation

Sau đó, bạn chỉ cần cắm các giá trị trong (các xy là những khác biệt giữa các yếu tố một lần trung tâm của họ được xác định) và bạn sẽ tìm thấy chiều dài của cạnh huyền, đó là khoảng cách giữa các các yếu tố.

+0

Điều đó giữ nếu "vị trí" được định nghĩa là tọa độ của góc trên cùng bên trái. Tôi nghĩ việc sử dụng điểm trung tâm là chính xác hơn. – Amberlamps

+0

@Amberlamps Chắc chắn, nếu đó là những gì OP muốn (họ đã không đề cập đến yêu cầu đó), thì họ có thể điều chỉnh nó (tôi cũng sẽ cập nhật câu trả lời). – alex

+0

Câu trả lời hiện tại của bạn có cho khoảng cách giữa 2 trung tâm không? – tenstar

0

như xa như div bây giờ đang trống rỗng, ý tưởng cơ bản là để đo khoảng cách giữa các góc trên bên trái của họ

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

nhưng bạn phải trừ đi chiều cao đầu tiên div 's và chiều rộng, nếu bạn đặt một cái gì đó bên trong . Phương pháp này có một số vấn đề với hỗ trợ và chiều rộng đường viền của các phần tử trong các trình duyệt khác nhau.

nào hãy nhìn vào Fiddle

Note, mà ngay cả với nội dung (nếu bạn không thay đổi nó với css) divs sẽ là 100% chiều rộng, vì vậy nếu bạn muốn chỉ để đo br 's sử dụng chiều cao:

distance = = y.offsetTop - x.offsetTop; 
Các vấn đề liên quan