JavaScriptのsinとcosを使って、円周上を移動する処理を記述してみます。
サンプルコード
以下のようなコードで、.circleを円周上に移動させてみます。
<div class="box"> <div class="circle"></div> </div>
.circleのtopとleftを変更させる想定でCSSを設定します。
.circle { position: absolute; background: red; }
最後にJavaScriptです。
const rotate = (ts) => { const count = ts / 1000; // 円周上のX座標とY座標を取得 const xPos = 100 * Math.sin(count); const yPos = 100 * Math.cos(count); console.log(count, xPos, yPos); document.querySelector('.circle').style.left = `${xPos}px`; document.querySelector('.circle').style.top = `${yPos}px`; window.requestAnimationFrame(rotate); } window.requestAnimationFrame(rotate);
円の中心が(0, 0)で半径がrの円周上の座標(x, y)は、x = r × sinθ、y = r × cosθの数式で求められます。
上記のコードでいうと4~5行目で、半径rが100の円周上の座標を取得していることになります。
これで.circleが円周上を移動するようになりました。
円周上を移動するデモページ
上記の例だと円周の最下部からスタートしていますが、開始地点を変える場合は以下のようにします。
const rotate = (ts) => { const count = ts / 1000; // 円周上のX座標とY座標を取得 const xPos = 100 * Math.sin(count + Math.PI); const yPos = 100 * Math.cos(count + Math.PI); console.log(count, xPos, yPos); document.querySelector('.circle').style.left = `${xPos}px`; document.querySelector('.circle').style.top = `${yPos}px`; window.requestAnimationFrame(rotate); } window.requestAnimationFrame(rotate);
これで円周の最上部からスタートするようになりました。
円周上を移動するデモページ2
同じように、円周の右端から開始する場合は「(Math.PI * 0.5)」、左は時から開始する場合は「(Math.PI * 1.5)」のようにすると変更できます。
円の中心位置をずらしたい場合、以下のように変更します。
const rotate = (ts) => { const count = ts / 1000; // 円周上のX座標とY座標を取得 const xPos = 100 * Math.sin(count) + 50; const yPos = 100 * Math.cos(count) + 50; console.log(count, xPos, yPos); document.querySelector('.circle').style.left = `${xPos}px`; document.querySelector('.circle').style.top = `${yPos}px`; window.requestAnimationFrame(rotate); } window.requestAnimationFrame(rotate);
この場合、円の中心が右に50px、下に50px移動しました。
円周上を移動するデモページ3
コメントが承認されるまで時間がかかります。