今回は、jQueryを使ってタブの切り替えを実装する方法について、初心者向けに解説していきます。
目次
jQueryでタブ切り替えのイベントを実装する方法
実装サンプル
<ul class="tab-area">
<li class="tab active">ドラゴンボール</li>
<li class="tab">鬼滅の刃</li>
<li class="tab">スパイファミリー</li>
</ul>
<div class="panel-area">
<div class="panel active">
<h2>ドラゴンボール</h2>
<ul>
<li>孫悟空</li>
<li>ベジータ</li>
<li>ピッコロ</li>
</ul>
</div>
<div class="panel">
<h2>鬼滅の刃</h2>
<ul>
<li>炭治郎</li>
<li>禰豆子</li>
<li>我妻善逸</li>
</ul>
</div>
<div class="panel">
<h2>スパイファミリー</h2>
<ul>
<li>アーニャ</li>
<li>ロイド</li>
<li>ヨル</li>
</ul>
</div>
</div>
HTML* {
box-sizing: border-box;
padding: 0;
}
ul {
list-style-type: none;
}
.tab-area {
display: flex;
border: 2px solid;
cursor: pointer;/* カーソルポインターに */
}
.tab {
width: calc(100%/3);
padding: 5px;
text-align: center;
}
.tab:nth-child(n+2) {
border-left: 2px solid;
}
.tab.active {
background-color: #000;
color: #fff;
}
.panel {
display: none;
text-align: center;
}
.panel.active {
display: block;
}
CSS$(function() {
$('.tab').on('click', function() {
$('.tab, .panel').removeClass('active');
$(this).addClass('active');
var index = $('.tab').index(this);
$('.panel').eq(index).addClass('active');
});
});
JavaScript出力結果
こちらが実装サンプルです。
上のタブをクリックすると、それぞれの詳細が表示されるという仕組みです。
こちらのサンプルの解説をしていきます。
Step1|タブ切り替えのボタン設置
まずタブ部分のHTML&CSSを準備します。
HTML
<ul class="tab-area">
<li class="tab active">ドラゴンボール</li>
<li class="tab">鬼滅の刃</li>
<li class="tab">スパイファミリー</li>
</ul>
HTML初期表示させるタブにのみ、「active
」クラスを持たせます。
このactive
クラスを付けたり外したりすることで、タブの切り替えを行います。
CSS
.tab-area {
display: flex;/* flexで横並び */
border: 2px solid;
cursor: pointer;/* カーソルポインターに */
}
.tab {
width: calc(100%/3);/* calc関数を使用し、均等に3分割する */
padding: 5px;
text-align: center;/* 文字を中央に。 */
}
.tab:nth-child(n+2) {
border-left: 2px solid;
}
.tab.active {
background-color: #000;
color: #fff;
}
CSSStep2|タブパネルの設置
次にタブパネルを設置します。
タブボタンと同じように、最初に表示させるパネルにのみactive
クラスを付与させます。
HTML
<div class="panel-area">
<div class="panel active">
<h2>ドラゴンボール</h2>
<ul>
<li>孫悟空</li>
<li>ベジータ</li>
<li>ピッコロ</li>
</ul>
</div>
<div class="panel">
<h2>鬼滅の刃</h2>
<ul>
<li>炭治郎</li>
<li>禰豆子</li>
<li>我妻善逸</li>
</ul>
</div>
<div class="panel">
<h2>スパイファミリー</h2>
<ul>
<li>アーニャ</li>
<li>ロイド</li>
<li>ヨル</li>
</ul>
</div>
</div>
HTMLCSS
.panel {
display: none;
text-align: center;
}
.panel.active {
display: block;
}
CSSactive
クラスを持つパネルのみ、display: block;
で表示させます。
Step3|jQueryでタブ切り替えを実装
最後に、jQueryでタブ切り替えの動きを実装します。
$(function() {
$('.tab').on('click', function() {
$('.tab, .panel').removeClass('active');
$(this).addClass('active');
var index = $('.tab').index(this);
$('.panel').eq(index).addClass('active');
});
});
JavaScript以下が実装の流れです。
①クリックイベントを設定する。
②タブとパネルからactive
クラスを外す。
③クリックしたタブにactive
クラスを付与する。
④クリックしたタブに対応するパネルにactive
クラスを付与する。
上記について解説します。
①クリックイベントを設定
$('.tab').on('click', function() {
// ここに、クリックされたときの内容(イベント)を書く。
});
JavaScript上記のように書くことで、「tab
」クラスを持つ要素をクリックしたときのイベントを設定することができます。
②タブとパネルからactive
クラスを外す
$('.tab, .panel').removeClass('active');
JavaScriptremoveClass
は、指定したクラスを外すメソッドです。
このメソッドを使って、タブとパネルのactive
クラスを外します。
③クリックしたタブにactive
クラスを付与
$(this).addClass('active');
JavaScriptaddClass
はremoveClassと逆で、指定したクラスを付与するメソッドです。$(this)
は、クリックした要素のことを指します。
この記述により、クリックしたタブにactive
クラスを付与することができます。
④クリックしたタブに対応するパネルにactive
クラスを付与
var index = $('.tab').index(this);
JavaScriptindex()
メソッドは、指定した要素の順番を取得するメソッドです。index(this)
で、クリックしたタブがtab
クラスを持つ要素の中で何番目の要素なのか、インデックス番号を取得することができます。
1番目のタブをクリックした場合は0、2番目のタブをクリックした場合は1を取得します。
そして、取得した値をindex
に代入します。
$('.panel').eq(index).addClass('active');
JavaScripteq()
メソッドは、インデックス番号を指定することで、特定の要素だけを取得するメソッドです。$('.panel').eq(index)
で、クリックしたタブのインデックス番号に対応するパネルを取得し、active
クラスを付与します。
jQueryの解説は以上となります。console.log()
をうまく使いながら、自分の手を動かして確認してみてください!