ログイン
問題7

ハンバーガーメニューを作ろう!

アイコン画像

問題7:ハンバーガーメニューを作ろう!

今回はハンバーガーメニューを作りましょう!アイコンは別の回で作っているので今回は省かせていただきます。

エディターのアイコンあらかじめエディタに書くコード

                <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¥
              

ブラウザのアイコン期待する画面


タグアイコン解答ソースコード

              $(function () {
  var iconHeight=$(".icon").innerHeight();
  var menuWidth=$(".menus").innerWidth();
  $(".menus").css({
    "padding-top":iconHeight,
    "left":-menuWidth
  });
  //ここからメニューアイコン
  $("body").on("click", "#open", function () {
    $(".bottom").animate({ top: "48%" }, 300, function () {
      $(".menus").animate({left:0},300);
    });
  });
  $("body").on("click", "#close", function () {
    $(".middle").animate({ opacity: 1 }, 300, function () {
      $(".menus").animate({left:-menuWidth},300);
    });
  });
});
¥JavaScript¥
            

コメントのアイコン解説

まずアイコンとメニュが重なっているのでメニュの上側を開けなければなりません。なのでアイコンの縦幅をinnerHeightで取得し、menuにpadding-topを用いてあけてあげます。そして次に初期状態ではメニュは隠れていなければならないのでleftで画面外左にメニュの横幅分移動させておきます。あとは簡単でメニュがクリックされた時、メニュを画面左からの距離を0にし、フェードイン。もう一度クリックされた時はその逆でフェードアウトさせれば終わりです。
ログインして解答を見る
完了にする!
twitterのアイコン
活動記録をTweetする
LINEの友達追加でお役立ち動画をGET!!
LINEの友達追加でお役立ち動画をGET!!

閉じる