今更ながら、親ボタンの周りに子ボタンを扇状に表示させてみる

今更ながら、親ボタンの周りに子ボタンを扇状に表示させてみる

PSVR用『Beat Saber』が遂に発売されました!気分はジェダイで毎日ノリノリな kouraku です。
おはこんばんちは。

さてさて今回は、JS(jQuery)を使って、マテリアルデザインのFab(Floating Action Button)をクリックした時に、そのボタンの周りに子Fabが扇状に現れる、という動きを作ってみたいと思います。

今回作成する内容

20190319_kouraku_01.png

  • 親Fabをクリックすると、周辺に子Fabが扇状に表示。
  • 子Fabが1個の時は親Fabの真上の位置(rotateZ(0))に表示。
  • 子Fabが2個以上のとき、1番目の子Fabは親Fabの真上の位置、
    最後の子Fabは親Fabの左側の位置(rotateZ(-90deg))、
    間の子Fabは等間隔の位置(rotateZ(0〜90の間))に表示。

子Fabを扇状に表示させるには

例えば子Fabが2個あったとして、
1個目の子Fabを transform: translateY(-100px) rotateZ(0);
2個目の子Fabを transform: translateY(-100px) rotateZ(-90deg) とした場合、
2個目の子Fabは親Fabの180度の位置に来るでしょうか?

答えは No です。
1個目と2個目は自身の角度が変わるだけで、親Fabから見て同じ90度の位置に重なるだけです。

20190319_kouraku_02.png

ではどうすれば良いか?
子Fabをレーンで囲むイメージで作ってあげて、そのレーンに角度を付ければ良いのです。

20190319_kouraku_03.png

0〜90度の間にうまく子Fabを配置するには

20190319_kouraku_05.png

例えば上図のとおり、子Fabが4個あった場合、
どうすれば図のとおり各子Fabに一定の角度をつけることができるでしょうか?

90度の中に4個だから・・・90÷4で1個当たり22.5度・・・は不正解ですね。

パッと見た感じだと、出すべき角度の数は、最初の1個を除くと3つ。
よって、1個当たり30度という数値が算出できれば良いわけです。

これは、以下のような計算式になります。

var rad = 90; // 扇状に表示させる角度
var deg = rad / (個数 - 1); // 1個当たりの角度

JavaScriptの割り算の落とし穴

1個当たりの角度を求める計算式ができました。
しかし、ここで1つ気をつけないといけないことがあります。

JavaScriptは数字を0で割ると、答えは0ではなくInfinityになる。

正常に動いているように見えるけれども、実は想定とは違う結果・・・ということになり兼ねません。
よって念のため、子Fabの数が1個の場合は角度が0になるように設定しましょう。

ということで作成&まとめ

See the Pen 子Fab表示を作ってみる by bashalog (@bashalog) on CodePen.

ちょっと複雑そうな動きなんかも、うまくバラしていけばシンプルに作ることができそうですよね。

にしても『Beat Saber』やると、普段運動していないから、翌日かるく筋肉痛とかなります。
良い運動になってるようで、楽しめてダイエットができるという一石二鳥のリズムゲームですね!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ