Vueコード答え・解説

雛形コードを元に Vue.js を用いて実装していきましょう。

1. メニューの中身を v-show で管理する。

#1-1. 変数を用意する。

new Vue({
  el: '#app',
  data: {
    isShow: false, // 追加
  },
});

#1-2. メニューの中身とマスクに v-show を記載する。

<!-- v-showディレクティブを記載する -->
<!-- isShowがtrueの時のみ描画する -->
<div v-show="isShow" class="nav__inner">
  <div class="nav__icon nav__icon--times">
    <i class="fas fa-times fa-3x"></i>
  </div>
  <ul class="nav__menu">
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー1</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー2</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー3</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー4</a>
    </li>
  </ul>
</div>
<!-- v-showディレクティブを記載する -->
<div v-show="isShow" class="nav__bg"></div>

2. メニューを v-on:click で表示できるようにする。

#2-1. 関数を用意する。

new Vue({
  el: '#app',
  data: {
    isShow: false,
  },
  methods: {
    showNav() {
      this.isShow = true; // 追加
    },
  },
});

#2-2. ハンバーガーアイコンに v-on:click を記載する。

<nav class="nav">
  <!-- v-onディレクティブを記載する -->
  <!-- クリックされた時showNavが実行される -->
  <div class="nav__icon" @click="showNav">
    <i class="fas fa-bars fa-3x"></i>
  </div>
  <div v-show="nav.isShow" class="nav__inner">
    <!-- 省略: メニューの中身 -->
  </div>
  <div v-show="nav.isShow" class="nav__bg"></div>
</nav>

#2-3. メニューを表示した時にハンバーガーアイコンを非表示にする。

<nav class="nav">
  <!-- v-showディレクティブを記載する -->
  <!-- isShowがfalseの時に描画される -->
  <div v-show="!isShow" class="nav__icon" @click="showNav">
    <i class="fas fa-bars fa-3x"></i>
  </div>
  <div v-show="nav.isShow" class="nav__inner">
    <!-- 省略: メニューの中身 -->
  </div>
  <div v-show="nav.isShow" class="nav__bg"></div>
</nav>

3. メニューの中身を v-on:click で非表示にしましょう。

#3-1. 関数を用意する。

new Vue({
  el: '#app',
  data: {
    isShow: false,
  },
  methods: {
    showNav() {
      this.isShow = true;
    },
    hiddenNav() {
      this.isShow = false: // 追加
    },
  },
});

#3-2. v-on:click を記載する。

<div v-show="isShow" class="nav__inner">
  <!-- v-onディレクティブを記載する -->
  <!-- クリックされた時hiddenNavを実行する -->
  <div class="nav__icon nav__icon--times" @click="hiddenNav">
    <i class="fas fa-times fa-3x"></i>
  </div>
  <ul class="nav__menu">
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー1</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー2</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー3</a>
    </li>
    <li class="nav__item">
      <a class="nav__link" href="#">メニュー4</a>
    </li>
  </ul>
</div>
<!-- v-onディレクティブを記載する -->
<div v-show="isShow" class="nav__bg" @click="hiddenNav"></div>

Last updated