ログイン
問題6

ハンバガーメニューアイコンを作ろう

アイコン画像

問題6:ハンバガーメニューアイコンを作ろう

今回はハンバーガーメニューのアイコンを自作してみましょう!題材として学べることが多いため問題にしました。

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

                <div class="container" id="open">
  <span class="top bar"></span>
  <span class="middle bar"></span>
  <span class="bottom bar"></span>
</div>
¥HTML¥
              
                .container{
  position: relative;
  width: 30px;
  height: 30px;
  background-color: #000;
  padding: 10px;
  cursor: pointer;
}
.bar{
  position: absolute;
  width: inherit;
  height: 3px;
  background-color: #fff;
  border-radius: 5px;
}
.top{
  top: 28%;
}
.middle{
  top: 48%;
}
.bottom{
  top: 68%;
}
¥CSS¥
              

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


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

              #close .top{
  transform: rotate(45deg);
}
#close .bottom{
  transform:rotate(-45deg);
}
¥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¥
            

コメントのアイコン解説

まず今回の解答の考え方の大枠を説明します。最初にcontainerにopenというidを与え、クリックされたらcloseというidに変更、逆もまた然り。という方法をとりました。なのでopenからcloseへの処理とcloseからopenへの処理はアニメーションの順番が違うだけで考え方は全く同じなので解説ではopenの方だけを説明します。
ではいきなりbodyに対してonを指定していることに疑問を抱きませんでしたか?普通に#openにclickイベント設定すればよくない?と思うのが普通だと思います。しかし、今回は先ほど話した通りidを変更します。なのでonによって親要素から指定しています。これについては違う問題で解説しているのでそちらを参考にしてください。
今回は上と下のbarが真ん中に集まってから回転して広がるようなアニメーションなのでこのアニメーションの順番を決めてあげなければなりません。
まずattrですがここはいいでしょう。その次のanimateはanimate({cssの設定},アニメーションの時間,アニメーション終了後の処理)、と設定できるのでこのアニメーション終了後の処理にbarが開く処理を書きます。barが開く処理は簡単で、まず真ん中のバーを消し、barにtransitionで変化にかかる秒数を指定し、最後にidを変更します。そしてcssに#close .topなどをセレクタとして設定しているとid変更後にこのセレクタ内のrotateによって回転します。
ではなぜわざわざjqueryのanimateでtransform:rotateを設定しないのかと疑問に思われると思いますが、実はanimateはtransformに対応していません。なので今回はこのような面倒な処理をしました。
ログインして解答を見る
完了にする!
twitterのアイコン
活動記録をTweetする
LINEの友達追加でお役立ち動画をGET!!
LINEの友達追加でお役立ち動画をGET!!

閉じる