私はDOM要素を生成し、円の周りに(十分に)均一に分布させて円にプロットできるJavaScript関数を持っています。コードは次のとおりです (私は jQuery を使用しています)。
function createFields(numberOfItems, className, radius) {
var container = $('#container');
for(var i = 0; i < +numberOfItems; i++) {
$('<div/>', {
'class': 'field ' + className,
'text': i + 1
}).appendTo(container);
}
var fields = $('.' + className),
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);
var y = Math.round(height/2 + radius * Math.sin(angle) - $(this).height()/2);
if(window.console) {
console.log($(this).text(), x, y);
}
$(this).css({
left: x + 'px',
top: y + 'px'
});
angle += step;
});
}
createFields(5, 'outer', 200);
createFields(4, 'inner', 120);
フィドル: http://jsfiddle.net/z79gj8a7/
生成された要素が垂直に対して 90 度から始まることに気付くでしょう。0度から始まるようにプロットしたいと思います。要するに、これを時計に例えると、3時間前に全項目をプロットしたいということです。スクリプトの角度を変更して-90
、線から 90 を差し引いてみましangle += step
たが、目的の効果がありません。
要素を現在の場所から -90 度でプロットする方法を提案するよりも数学が得意な人はいますか? (単に回転できることは承知して#container
いますが、コンテンツを正しい向きに保つために要素を回転させて補正する必要があるため、ハックのように思えます)。
どうもありがとう。