見出し画像

TailwindのUIコンポーネントFlowbiteのNavbarでアニメーションする方法

上から下へメニューが出てくる簡単なアニメーションの実装方法のメモになります。
Flowbiteを使用したナビゲーションメニューの基本的な実装方法はFlowbiteのサイトをご参照ください。
Tailwind CSS Navbar - Flowbite

カスタマイズ方法

1.メニューのdivタグのclassにtransitionを追加する

class="....transition-all ease-in-out duration-500"

2.Collapseクラスを継承して独自クラスを作成

class MenuCollapse extends Collapse {
    private body = document.querySelector('body');

    public collapse() {
        //console.log('menu collapse');
        // bodyのスクロール設定
        this.body.classList.remove('h-full');
        this.body.classList.remove('overflow-hidden');

        // ハンバーガーアイコンの表示・非表示
        this._triggerEl.querySelector('.open-button').classList.remove('hidden');
        this._triggerEl.querySelector('.close-button').classList.add('hidden');

        // 高さを0にする
        this._targetEl.style.height = '0px';

        if (this._triggerEl) {
            this._triggerEl.setAttribute('aria-expanded', 'false');
        }
        this._visible = false;
        this._options.onCollapse(this);
    }

    public expand() {
        //console.log('menu expand');
        // bodyのスクロール設定
        this.body.classList.add('h-full');
        this.body.classList.add('overflow-hidden');

        // ハンバーガーアイコンの表示・非表示
        this._triggerEl.querySelector('.open-button').classList.add('hidden');
        this._triggerEl.querySelector('.close-button').classList.remove('hidden');

        // 高さを「ウインドウの高さ - ヘッダーの高さ」にする
        this._targetEl.style.height = (window.innerHeight - 92) + 'px';

        if (this._triggerEl) {
            this._triggerEl.setAttribute('aria-expanded', 'true');
        }
        this._visible = true;
        this._options.onExpand(this);
    }
}

3.独自クラスを使用してCollapseの設定を行う

const navbarStickyMenu = document.getElementById('navbar-sticky-menu');
const navbarStickyButton = document.getElementById('navbar-sticky-button');
const navbarStickyCollapse = new MenuCollapse(
    navbarStickyMenu,
    navbarStickyButton,
    {
        onCollapse: () => {
        },
        onExpand: () => {
        },
        onToggle: () => {
        }
    }
);

メニューのdivタグに追加するCSS classを変更、独自クラスのcollapse、expandメソッド内の実装をカスマイズすることで様々なアニメーションが出来ると思います。参考になれば幸いです。

上記のアニメーションを実装したWEBサイト


この記事が気に入ったらサポートをしてみませんか?