0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jQueryで作るハンバーガーメニューの開閉アニメーション【初級編⑥】

Posted at

はじめに

今回は、下記のサイトを参考に、jQueryでハンバーガーメニューの開閉アニメーションについて学んでいきます。

全体のコード一覧

See the Pen jQueryで作るハンバーガーメニューの開閉アニメーション by Uka Suzuki (@uukasuzuki_) on CodePen.

HTML5のコード解説

<nav class="sp-nav">
  <ul>
    <li><a href="#">MENU</a></li>
    <li><a href="#">MENU</a></li>
    <li><a href="#">MENU</a></li>
    <li class="close"><span>閉じる</span></li>
  </ul>
</nav>
<div id="hamburger">
  <span></span>
</div>

レスポンシブのヘッダーメニューを作る際、デスクトップ上と同じくコードを書きます。今回は、最後に閉じるボタンを設定し、jQueryで定数を定義させます。

CSS3のコード解説

@media screen and (max-width: 640px) {
    .pc-nav {
        display: none;
    }
    .sp-nav {
        z-index: 1;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100vh;
        display: block;
        width: 100%;
        background: rgba(255, 68, 0, 0.8);
        opacity: 0;
        transform: translateY(-100%);
        transition: all .2s ease-in-out;
    }
    #hamburger {
        position: relative;
        display: block;
        width: 30px;
        height: 25px;
        margin: 0 0 0 auto;
        cursor: pointer;
    }
    #hamburger span {
        position: absolute;
        top: 50%;
        left: 0;
        display: block;
        width: 100%;
        height: 2px;
        background-color: #333;
        transform: translateY(-50%);
    }
    #hamburger::before {
        content: '';
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 2px;
        background-color: #333;
    }
    #hamburger::after {
        content: '';
        display: block;
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 2px;
        background-color: #333;
    }
    .sp-nav ul {
        padding: 0;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        height: 100%;
    }
    .sp-nav li {
        margin: 0;
        padding: 0;
    }
    .sp-nav li span {
        font-size: 15px;
        color: #333;
    }
    .sp-nav li a, .sp-nav li span {
        display: block;
        padding: 20px 0;
    }
    .sp-nav .close {
        position: relative;
        padding-left: 20px;
        cursor: pointer;
    }
    .sp-nav .close::before {
        content: '';
        position: absolute;
        top: 50%;
        left: 0;
        display: block;
        width: 16px;
        height: 1px;
        background: #333;
        transform: rotate( 45deg );
    }
    .sp-nav .close::after {
        content: '';
        position: absolute;
        top: 50%;
        left: 0;
        display: block;
        width: 16px;
        height: 1px;
        background: #333;
        transform: rotate( -45deg );
    }
    .toggle {
        transform: translateY( 0 );
        opacity: 1;
    }
}

レスポンシブメニューでは、position: fixed;で要素の位置を変わらず同じ場所に表示させます。また、top: 0;を指定することでブラウザウィンドウの上端に接するようにします。これらを組み合わせるとページをスクロールしてもその位置にとどまります。

jQueryのコード解説

$(function() {
    const hum = $('#hamburger, .close') // #hamburgerと.closeの要素を選択している
    const nav = $('.sp-nav') // navという定数を定義し、.sp-navという要素を選択している
    hum.on('click', function(){
       nav.toggleClass('toggle'); // ハンバーガーメニューをクリックすると表示される
    });
});
  • const hum = $('#hamburger , .close');は、#hamburgerの要素とクラスがcloseの要素を選択して変数に代入します。

  • const nav = $('.sp-nav');では、クラスが「sp-nav」の要素を選択して変数に代入し、その後のhum.on('click', function()で、変数humがクリックされたときに処理されます。

  • 最後に、nav.toggleClass('toggle');では、変数nav(クラスが「sp-nav」の要素)にtoggleクラスを追加または削除すると開閉される仕組みになっている。

まとめ

今回は、ChatGPTを使って解説を読みながら、簡潔にまとめました。また、今後に活かせるようコードの組み立て方に関して、論理的に考えられるようになりたいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?