Written by Kasumi

JavaScriptでタブ切り替えを実装する方法【jQuery不要】

jQueryを使わず、JavaScriptだけでタブ切り替えを実装したい。

本記事ではこのような悩みを解決。

実装例を元に解説します。

実装例

See the Pen
JavaScriptでタブ切り替えを実装する方法
by Kohei (@kouk05)
on CodePen.0

タブ切り替えの実装例です。

タブをクリックすると、それに応じたコンテンツが表示・非表示で切り替わります。

実装手順は以下の通りです。

タブ切り替えのHTML

<!-- タブ -->
<ul class="tab-list">
  <li class="tab-list-item active">タブ01</li>
  <li class="tab-list-item">タブ02</li>
  <li class="tab-list-item">タブ03</li>
</ul>

<!-- タブコンテンツ  -->
<div class="tab-contents">
  <div class="tab-contents-item show">
    タブコンテンツ01
  </div>
    <div class="tab-contents-item">
    タブコンテンツ02
  </div>
    <div class="tab-contents-item">
    タブコンテンツ03
  </div>
</div>

まずはタブ切り替え用のHTMLを準備します。

最初に表示させたいタブにactiveクラスを付与。

最初に表示させたいタブコンテンツにshowクラスを付与します。

タブ切り替えのCSS

.tab-list {
  list-style-type: none;
  display: flex;
  flex-flow: row wrap;
  justify-content: space-btween;
}
.tab-list-item {
  text-align: center;
  flex: 0 0 33.33333%;
  background-color: #eee;
  padding: 10px 0;
}
.tab-list-item.active {
  background-color: #7FCCE3;
}

.tab-contents-item {
  display: none;
}
.tab-contents-item.show {
  display: block;
}

次にCSSを使ってタブ切り替えを装飾します。

タブを選択・非選択で明確にわかるようにbackgroundプロパティを使って色分けしてます。

タブコンテンツをdisplayプロパティでshowクラスが付与されてるものは表示。

付与されてないものは非表示にしときます。

タブ切り替えのJS

// タブ
const tabList = document.querySelectorAll('.tab-list-item');
// タブコンテンツ
const tabContent = document.querySelectorAll('.tab-contents-item');

//DOMが読み込み終わったら
document.addEventListener('DOMContentLoaded', function(){
  // タブに対してクリックイベントを適用
  for(let i = 0; i < tabList.length; i++) {
    tabList[i].addEventListener('click', tabSwitch);
  }
  // タブをクリックすると実行する関数
  function tabSwitch(){
    // activeクラスを削除
    document.querySelectorAll('.active')[0].classList.remove('active');
    // クリックしたタブにactiveクラスを付与    
    this.classList.add('active');
    // showクラスを削除
    document.querySelectorAll('.show')[0].classList.remove('show');
    // タブを配列風オブジェクトとして定義
    const aryTabs = Array.prototype.slice.call(tabList);
    // クリックしたタブの配列番号を取得     
    const index = aryTabs.indexOf(this);
    // クリックしたタブと同じ配列番号のタブコンテンツにshowクラスを付与    
    tabContent[index].classList.add('show');
  };
});

最後にJavaScriptでタブ切り替えを実装します。

タブとタブコンテンツ要素を変数に格納。

addEventListenerでタブのクリックイベントを定義。

タブをクリックしたら実行する関数を引数に定義します。

classList.removeを使って通常のタブはactiveクラスを削除。

クリックしたタブにはclassList.addを使ってactiveクラスを付与します。

indexOfでクリックしたタブの配列番号を取得。

クリックしたタブと同じ配列番号にあるタブコンテンツにshowクラスを付与。

それ以外のタブコンテンツはshowクラスを削除します。

以上でタブ切り替えの実装が完了です。

まとめ

jQueryを使わず、JavaScriptでタブ切り替えを実装する方法について紹介しました。

以上で解説を終わります。

目次

関連記事

JavaScript

【JavaScript】コンストラクター関数を使ってオブジェクトの雛形を作成・インスタンス化する方法

2022.12.12
673
JavaScript

JavaScriptでDOM(HTML)・画像の読み込み完了時に任意の処理を実行する方法

2022.12.26
2525
JavaScript

JavaScriptで文字列の指定位置にHTMLタグを入れる方法

2022.12.15
1619
JavaScript

【JavaScript】スプレット構文(…)を使い、配列・オブジェクトを追加・連結(マージ)する方法

2022.12.04
719