tomatommy
@tomatommy

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

クリックした場所へハイライトが移動するcss

解決したいこと

下記のようなアニメーションを実現したい

ダウンロード.gif

  • focus が当たったTabへ, backgroundのハイライトが ease-in で移動する
  • この Tab の出典
    • https://nextui.org/docs/components/tabs
    • src も公開されていますが、未熟者のため、どのコードがこの機能に紐づいているのかわかりませんでした

知りたいこと

この機能を実装するにあたって

  • 実装に必要な知識を得るための検索方法
  • or 実装方法のサンプル

を知りたいです.

基本的な css animation は把握しています

0

2Answer

質問に提示されているのは、出典の Usage セクションにあるサンプルですか? それの中の項目をクリックすると、その項目がハイライトされるが、それをどうやっているか知りたいということですか?

2Like

Comments

  1. @tomatommy

    Questioner

    そうです!仕組みを知りたいです

  2. 項目クリックで html (DOM) がどのように書き換えられるか開発者ツールで見てみました。下の画像を見てください。

    NextUI.png

    クリックして選択項目が変わると、NextUI ライブラリのスクリプトが動いて DOM が書き換えられ(その項目の button 要素の area-selected 属性が true に変わる、data-selected="true" 属性が追加される、span 要素が追加されるなど)、その結果に応じてハイライトされるようです。

    しかし、NextUI ライブラリのスクリプトがどのように DOM を書き換えているのか、書き換えた結果の何がハイライトに影響しているのかの詳しい仕組みまでは分かりません。

    それを調べるには NextUI ライブラリのソースコードを入手して解析するといったことが必要ではないかと思いますが、とてもそこまでやる気力は自分にはないです。

    そういう情報が必要ということですと、自分はお役に立てないです。他の方の回答をお待ちください。

@oura-hideyoshi さん
こんにちは。NextUI ライブラリでの仕組みはわかりませんが、バニラJSでよろしければ作ってみました(意図したものと違っていたら申し訳ありません)

See the Pen CurrentListsSelect by benjuwan (@benjuwan) on CodePen.

仕組みとしては、
1:選択されているリスト要素に任意の属性を付与
2:各リストのクリック処理で、上記任意の属性の移行(クリックしたリストには付与、直前まで選択中だったリストからは削除を行う)
3:アニメーションはCSSのtransformtransitionで行う

2の「上記任意の属性の移行」に関しての補足として、直前まで選択中だったリストのインデックス番号を取得して、クリックしたリストのインデックス番号と比較し、その差分で付与する class を区別しています。

PS:拙速で作りが荒い部分もあるかと思いますがご容赦ください。

2Like

Comments

  1. @tomatommy

    Questioner

    なるほど、 NextUI - Tabs のようなコンポーネントを実装するにあたり、参考になるとっかかりになります!

    • 前回 focus が当たっていた部分から現在focusが当たっているところまで 移動する方法

    これに関しては自分で考えてみたいとおもいます

    ありがとうございます!

Your answer might help someone💌