コード
var tabBtns = document.getElementsByClassName('tab');
var tabStages = document.getElementsByClassName('stage');
var activeIndex = 0;
Array.prototype.forEach.call(tabBtns, function (element, index) {
element.addEventListener('click', function (e) {
if (activeIndex === index) return;
// 前回のアクティブクラスを削除
tabBtns.item(activeIndex).classList.remove('is-active');
tabStages.item(activeIndex).classList.remove('is-active');
// クリックした要素にアクティブクラスを追加
e.target.classList.add('is-active');
tabStages.item(index).classList.add('is-active');
// 現在アクティブの要素のインデックスを更新
activeIndex = index;
})
})
ul li {
list-style: none;
}
.tabs {
display: flex;
flex-direction: row;
color: #fff;
}
.tab:first-of-type {
background-color: #f00;
}
.tab:nth-of-type(2) {
background-color: #0f0;
}
.tab:last-of-type {
background-color: #00f;
}
.tab.is-active {
background-color: #333;
}
.stage {
display: none;
width: 600px;
height: 300px;
}
.stage.is-active {
display: block;
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<ul class="tabs">
<li class="tab is-active">タブ1</li>
<li class="tab">タブ2</li>
<li class="tab">タブ3</li>
</ul>
<div class="stage is-active">
<h2>Stage1</h2>
<p>Stage1</p>
</div>
<div class="stage">
<h2>Stage2</h2>
<p>Stage2</p>
</div>
<div class="stage">
<h2>Stage3</h2>
<p>Stage3</p>
</div>
<script src="./script.js"></script>
</body>
</html>