ポートフォーリオサイト制作(メディアクエリとJavaScript5)

Photo by Maxwell Nelson on Unsplash プログラミング
Photo by Maxwell Nelson on Unsplash

こんにちは、コンスキです。

今回は、ハンバーガーメニューのアイコンをタップするとばつ印になるアニメーション作りたいと思います。

忘れていたアニメーション

ヘッダーにある2本の横線をタップするとハンバーガーメニューを開くことができることは、以前話したと思います。

さらに、開いた状態で同じく2本の横線をタップすると、今度はハンバーガーメニューを閉じることができます。

私が参考しているサイトでよくあるのは、ハンバーガーメニューが閉じられているときは2本の横線になり、ハンバーガーメニューが開かれているときはばつ印になるというようなアニメーションです。

ハンバーガーメニューの開閉のアニメーションをつけたときは気がつかなかったのですが、うっかりこのばつ印に変更するアニメーションをつけ忘れていました。

今回はそのアニメーションをどうやって設定するのかについて書いていきます。

設定方法

まずは、ハンバーガーメニューの2本の横線を単に「アイコン」と呼ぶことにします。

このアイコンを構成している横線一つ一つにCSSで「transitoin」プロパティを設定します。

これは横線が滑らかに移動するようにするためです

	.hamburger_line {
		transition: all 0.2s ease;
	}

次にJavaScriptで線の傾きや上下の位置を設定します。

// ハンバーガーメニュー
// 要素の取得
let hamburgerButton = document.getElementById('hamburger_button');
let hamburgerMenu =  document.getElementById('hamburger_menu');
let hamburgerLine = document.getElementsByClassName('hamburger_line');

//ハンバーガメニュー状態
let isOpen = false;

//ハンバーガーメニューを画面の表示と非表示
function showAndHide() {
	if(!isOpen) {
		hamburgerMenu.style.top = '64px';			
	} else {
		hamburgerMenu.style.top = '-1000px';	
	}
}

//ハンバーガーメニューのアイコンのアニメーション
function changeIcon() {
	if(!isOpen) {
		hamburgerLine[0].style.marginTop = '8px';
		hamburgerLine[1].style.marginBottom = '8px';		
		setTimeout(function() {
					hamburgerLine[0].style.transform = 'rotate(45deg)';
					hamburgerLine[1].style.transform = 'rotate(-45deg)';
		}, 200);
	} else {
		hamburgerLine[0].style.transform = 'rotate(0deg)';
		hamburgerLine[1].style.transform = 'rotate(0deg)';
		setTimeout(function() {
			hamburgerLine[0].style.marginTop = '0';
			hamburgerLine[1].style.marginBottom = '0';
		}, 200);
	}
}

hamburgerButton.addEventListener('click', function() {
	showAndHide();
	changeIcon();
	isOpen = !isOpen;
});

これでアイコンをタップすることでハンバーガーメニューのアイコンのアニメーションが表示されるようになりました。

ハンバーガーメニューが閉じている状態であればばつ印に、ハンバーガーメニューが既に開いている状態であればアイコンはもとの2本の横線に戻ります。

コメント

タイトルとURLをコピーしました