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
クラスを付与します。
これで完成です!
上記のようにリダイレクトせずにページないでタブを切り替えできます!