2012-04-14 66 views
31

Tôi đang tìm một hàm để sắp xếp một số phần tử xung quanh một vòng tròn.
kết quả nên được một cái gì đó như:Sắp xếp động một số yếu tố xung quanh một vòng tròn

enter image description here

+10

@camus vấn đề thực sự của tôi là tôi không biết lượng giác;) – Omid

+0

chỉ cho 4 phần tử hoặc cho các phần tử 'n' trong cùng khoảng cách? – Neysor

+0

@Neysor 'n' phần tử với khoảng cách khác nhau. – Omid

Trả lời

62

Dưới đây là một số mã mà sẽ giúp bạn:

var numElements = 4, 
    angle = 0 
    step = (2*Math.PI)/numElements; 
for(var i = 0; i < numElements.length; i++) { 
    var x = container_width/2 + radius * Math.cos(angle); 
    var y = container_height/2 + radius * Math.sin(angle); 
    angle += step; 
} 

Nó không phải là hoàn toàn nhưng nên cung cấp cho bạn một khởi đầu tốt.


Cập nhật: Đây là cái gì đó thực sự hoạt động:

var radius = 200; // radius of the circle 
var fields = $('.field'), 
    container = $('#container'), 
    width = container.width(), 
    height = container.height(), 
    angle = 0, 
    step = (2*Math.PI)/fields.length; 
fields.each(function() { 
    var x = Math.round(width/2 + radius * Math.cos(angle) - $(this).width()/2), 
     y = Math.round(height/2 + radius * Math.sin(angle) - $(this).height()/2); 
    $(this).css({ 
     left: x + 'px', 
     top: y + 'px' 
    }); 
    angle += step; 
}); 

Demo: http://jsfiddle.net/ThiefMaster/LPh33/
Dưới đây là một improved version nơi bạn có thể thay đổi số lượng phần tử.

+0

làm thế nào để bạn biết chu trình ở đâu? – Omid

+0

Bạn cần thêm tọa độ của vòng tròn và trừ một nửa kích thước của phần tử, từ 'x' và' y'. –

+1

Tôi đã cập nhật câu trả lời để bao gồm một ví dụ làm việc. – ThiefMaster

10

Đối với một yếu tố xung quanh một trung tâm tại (x, y), khoảng cách r, trung tâm của phần tử cần được bố trí tại địa chỉ:

(x + r cos(2kπ/n), y + r sin(2kπ/n)) 

nơi n là số nguyên tố và k là "số" của phần tử bạn hiện đang định vị (từ 1 đến n bao gồm).

+1

Tôi nghĩ rằng bạn đã bỏ lỡ một '*' sau khi ' x + r', phải không? – Omid

+4

'xy' có nghĩa giống như' x * y' trong toán học. –

+0

Điều này đã giúp tôi Cảm ơn – Krishnan

-1

Tôi đã sửa đổi fiddle ThiefMaster để tự động phân phối divs xung quanh một vòng tròn với bán kính bằng chiều rộng/2 của div container:

<div class="circle-distribute-container"> 
    <div class="circle-element">one</div> 
    <div class="circle-element">two</div> 
    <div class="circle-element">three</div> 
    <div class="circle-element">four</div> 
    <div class="circle-element">five</div> 
</div> 
<div class="circle-distribute-container"> 
    <div class="circle-element">another one</div> 
    <div class="circle-element">another two</div> 
    <div class="circle-element">another three</div> 
    <div class="circle-element">another four</div> 
</div> 

Xem link

Các vấn đề liên quan