jQueryを使ってタブメニューを作る

はじめに

jQueyを使ってタブメニューを作る方法について

HTML

まずはhtmlを下記のように記述します。

<ul class="tab-title">
  <li class="tab tab-active">タブタイトル1</li>
  <li class="tab">タブタイトル2</li>
  <li class="tab">タブタイトル3</li>
</ul>
<div class="tab-contents">
  <div class="tab-body body-active">
     <p>コンテンツ1</p>
  </div>
  <div class="tab-body">
     <p>コンテンツ2</p>
  </div>
  <div class="tab-body">
    <p>コンテンツ3</p>
  </div>
</div>

タブのタイトルの部分は、クリックされると.tab-activeクラスが付与されるようにjQueryで実装します。

タブのコンテンツの部分も、クリックされると.body-activeクラスが付与されるようにjQueryで実装します。

続いて、下記のようにcssを書きます。

.tab-title {
  display: flex;
  justify-content: space-around;
  text-align: center;
  list-style: none;
}

.tab {
  width: 100%;
  padding: 10px;
  cursor: pointer;
  border: 1px solid #CCC;
}

.tab-active {
  color: #FFF;
  background: #19b5d1;
}

.tab-body {
  display: none;
  padding: 15px;
}

.body-active {
  display: block;
}

タブタイトルをクリックすると付与される.tab-activeに対して、cssで背景色と文字の色を変更します。

コンテンツの部分は、デフォルトでは非表示にしておいて、.body-activeクラスが付与されているコンテンツだけを表示するようにします。

最後にjQueryの設定です。

document.addEventListener("turbolinks:load", function() {
  $(function() {
    $('.tab').click(function(){
        $('.tab-active').removeClass('tab-active');
        $(this).addClass('tab-active');
        $('.body-active').removeClass('body-active');
        const index = $(this).index();
        $('.tab-body').eq(index).addClass('body-active');
    });
  });
})

まず、document.addEventListener("turbolinks:load", function() {})の部分は、railsで実装する場合にのみ記述します。

railsのデフォルトで入っているturbolinksというgemを無効化するための記述です。

railsで使わない場合は記述する必要はありません。

続いて、

$('.tab').click(function(){})で、タブタイトルがクリックされたときに作動するようにします。

$('.tab-active').removeClass('tab-active');では、.tab-activeクラスが付与されているタイトルのクラスから.tab-activeクラスを取ります。

$(this).addClass('tab-active');では、クリックされたタブタイトルのクラスに対して、.tab-activeクラスを付与します。

ここまでが、タブのタイトルの部分の処理です。

$('.body-active').removeClass('body-active');では、タイトルの時と同様に、

.body-activeクラスが付与されているコンテンツのクラスから'.body-active'クラスを取ります。

const index = $(this).index();では、クリックされたタイトルのtabクラスのインデックス番号を取得して、変数indexに代入します。

$('.tab-body').eq(index).addClass('body-active');では、

先程取得したインデックス番号と同じインデックス番号をもつ、コンテンツのtab-bodyクラスを取得し、

そのクラスに対して、body-activeクラスを付与します。

これで完成です!

f:id:study-output:20210609164742p:plain

f:id:study-output:20210609164759p:plain

上記のようにリダイレクトせずにページないでタブを切り替えできます!