問題
7
jQuery
ハンバーガーメニューを作ろう!
jQueryの問題に挑戦しよう!
問題
「ハンバーガーメニューを作ろう!」
今回はハンバーガーメニューを作りましょう!アイコンは別の回で作っているので今回は省かせていただきます。
あらかじめエディタに書くコード
<div class="icon" id="open">
<span class="top bar"></span>
<span class="middle bar"></span>
<span class="bottom bar"></span>
</div>
<nav class="menus">
<ul class="menu-list">
<li><a href="#">ホーム</a></li>
<li><a href="#">コンタクト</a></li>
<li><a href="#">アクセス</a></li>
<li><a href="#">ニュース</a></li>
</ul>
</nav>
¥HTML¥
body{
margin: 0;
padding: 0;
}
.icon{
position: relative;
width: 30px;
height: 30px;
background-color: #000;
padding: 10px;
cursor: pointer;
z-index: 2;
}
.bar{
position: absolute;
width: inherit;
height: 3px;
background-color: #fff;
border-radius: 5px;
}
.top{
top: 28%;
}
.middle{
top: 48%;
}
.bottom{
top: 68%;
}
#close .top{
transform: rotate(45deg);
}
#close .bottom{
transform:rotate(-45deg);
}
.menus{
background-color: #000;
width: 300px;
position: fixed;
top: 0;
}
.menu-list{
list-style: none;
}
.menu-list a{
text-decoration: none;
color: #fff;
display: block;
}
.menu-list li{
line-height: 2em;
}
¥CSS¥
$(function () {
$("body").on("click", "#open", function () {
$(".top").animate({ top: "48%" }, 300),
$(".bottom").animate({ top: "48%" }, 300, function () {
$(".middle").animate({ opacity: 0 }, 0);
$(".bar").css("transition", ".3s");
$("#open").attr("id", "close");
});
});
$("body").on("click", "#close", function () {
$("#close").attr("id", "open");
$(".middle").animate({ opacity: 1 }, 300, function () {
$(".bar").css("transition", "none");
$(".top").animate({ top: "28%" }, 300);
$(".bottom").animate({ top: "68%" }, 300);
});
});
});
¥JavaScript¥
期待する画面
解答と解説(ハンバーガーメニューを作ろう!)
解説
LINE登録して解答を見る
※ご登録後トークルーム下部にあるメニュー内
「無料問題集※解答付き」を押すと
解答閲覧用URLが届きます
まずアイコンとメニュが重なっているのでメニュの上側を開けなければなりません。なのでアイコンの縦幅をinnerHeightで取得し、menuにpadding-topを用いてあけてあげます。そして次に初期状態ではメニュは隠れていなければならないのでleftで画面外左にメニュの横幅分移動させておきます。あとは簡単でメニュがクリックされた時、メニュを画面左からの距離を0にし、フェードイン。もう一度クリックされた時はその逆でフェードアウトさせれば終わりです。