呉服屋店長のプログラミング学習記録

呉服屋店長が未経験でプログラミング、Web制作で稼げるかの記録です。

ハンバーガーメニューをつくりました

こんにちは。

 

デイトラ中級に入り、JavaScript と JQueryの基礎を学習しました。

ここからプログラミングっぽくなりました。

 

今回はjQureyをつかってハンバーガーメニューを実装していったので、試行錯誤つくったものを解説していきます。

 

               作成サンプルはこちら ↓

             ハンバーガーメニューのサンプル

 

実装した内容は以下になります。

  • ハンバーガーメニューボタンをHTML CSSで作成。
  • クリックするとメニューが開くと同時にハンバーガーメニューが×マークに変形。同時に画面全体を暗くする。
  • ×マークをクリックすることでメニューがとじる。同時に画面の明るさを戻す
  • メニュー展開時の画面が暗いところを押してもメニューを閉じて×マークがハンバーガーに戻す。
  • メニューをおしたら指定箇所にリンクしてメニューを閉じる、画面の明るさを戻す。

 

以下、実装コードです。

[  HTML  ]

ハンバーガーメニューボタン

<div class="hamburger-menu">
    <span class="hamburger-menu__line"></span>
  </div>
 
ハンバーガーボタンクリックで開くメニュー
  <ul class="header-drawer">
     <li><a href="">aaaa</a></li>
     <li><a href="">aaaa</a></li>
     <li><a href="">aaaa</a></li>
     <li><a href="">aaaa</a></li>  
  </ul>
 
ハンバーガーメニュー展開時に全体を暗くする用のコード
 <div id="gray-display"></div>
 
 
 
 
 

[ CSS ]

 
//ハンバーガーメニューアイコン----------------------
.hamburger-menu{
  displayflex;
  align-itemscenter;
  width32px;
  height32px;
  cursorpointer;
  z-index10;
  positionabsolute;
  right30px;
  top30px;
 
}

.hamburger-menu__line{
  displayblock;
  width100%;
  height4px;
  border-radius4px;
  background-color:red;
  positionrelative;
  transitionall 0.5s;
 
}

.hamburger-menu__line::before,
.hamburger-menu__line::after{
  content'';
  displayblock;
  width100%;
  height4px;
  border-radius4px;
  background-colorred;
  positionabsolute;
  transitionall 0.5s;
 
}

.hamburger-menu__line::before{
  transformtranslateY(-12px);
}
.hamburger-menu__line::after{
  transformtranslateY(12px);
}
 
 
/jQueryでopenクラスを追加することでハンバーガーメニューを×に変形させる----
.hamburger-menu.open .hamburger-menu__line{
  background-colortransparent;
}
.hamburger-menu.open .hamburger-menu__line::before{
  transformrotate(45deg);
}
.hamburger-menu.open .hamburger-menu__line::after{
  transformrotate(-45deg);
}


//ハンバーガーメニュークリックで開くドロワーメニュー-------
.header-drawer {
  positionfixed;
  top-20px;
  right0;
  background-colorblack;
  width200px;
  height400px;
  padding-top100px;
  z-index9;
  displaynone;
  }
 
  .header-drawer li {
    font-size28px;
    margin-bottom20px;
    padding-left30px;
    list-stylenone;
    text-aligncenter;
  }
 
 
//メニュー展開時画面暗くする------------
#gray-display {
  positionfixed;
  top0;
  left0;
  width100%;
  height100%;
  background-colorgray;
  opacity0.8;
  z-index8;
 //------------------------------------------
 
 
 
 
 

[ jQuery ]

 
$(function() {
 
  //ハンバーガーメニュークリックでイベント作動
  //ハンバーガーメニューにopenクラスがついていれば外す
  //   →×からハンバーガーにもどる
  //ドロワーメニュー閉じる  画面暗い解除
  $('.hamburger-menu').clickfunction() {
    if($(this).hasClass('open')){
      $(this).removeClass('open');
      $('.header-drawer').slideToggle();
      $('#gray-display').hide();

  //ハンバーガーメニューにopenクラスがついていなければ追加
  //   →ハンバーガーから×に変形
  //ドロワーメニュー開く  画面暗くする展開
    }else{
      $('.header-drawer').slideToggle();
      $('#gray-display').show(); 
      $(this).addClass('open');
    }
  });
 

  //グレイ部分のクリックで全て閉じる
  $('#gray-display').click(function() {
    $(this).next().fadeOut(200,function() {
    $('#gray-display').hide();
      $('.header-drawer').slideUp();
      $('.hamburger-menu').removeClass('open');
    });
  });

  //ドロワーメニュークリックで全て閉じる
   //×をハンバーガーに戻す
  $('.header-drawer li').click(function() {
  $('#gray-display').hide();
      $('.header-drawer').hide();
      $('.hamburger-menu').removeClass('open');
  });
 
});
 
 
 以上がハンバーガーメニュー実装になります。
まだ基礎しか勉強していないなかでの実装ですので、もっと効率的なものがあれば是非教えてください。
 
それでは