Tab功能在很多的前端framework中是一個很常見的,我們只要套一下對應的Class及執行一段JS功能就可以實作出來了,可是還是不了解後面到底做什麼處理才會有這樣的結果,那我們今天就來用原生JavaScript實作一個出來,來看看這後面到底發生什麼事情吧!
Html
控制按鈕的部分:
第四行 href=””中會寫入javascript:void(0)主要是不執行a link的預設功能。class的部分有看到tablink 跟 testbtn這兩個class是稍後JavaScript要控制的元素,再來我們看到onclick=”openCity(event, ‘class1’)” 這串是執行JavaScript定義的function裡面有代入event跟對應的內容id。
內容的部份:
顯示隱藏的內容操作是以id=”class x”去做操作的,它對應的是你按鈕上面代入的id參數來指定你要哪個內容顯示隱藏
<div class="bar-block">
<div class="container">
<h5>選單</h5>
<a href="javascript:void(0)" class="bar-item button tablink testbtn" onclick="openClass(event, 'class1')">教學1</a>
<a href="javascript:void(0)" class="bar-item button tablink" onclick="openClass(event, 'class2')">教學2</a>
<a href="javascript:void(0)" class="bar-item button tablink" onclick="openClass(event, 'class3')">教學3</a>
<a href="javascript:void(0)" class="bar-item button tablink" onclick="openClass(event, 'class4')">教學4</a>
</div>
</div>
<div id="class1" class="container class">
教學1內容
教學1內容
教學1內容
</div>
<div id="class2" class="container class">
教學2內容
教學2內容
教學2內容
</div>
<div id="class3" class="container class">
教學3內容
教學3內容
教學3內容
</div>
<div id="class4" class="container class">
教學4內容
教學4內容
教學4內容
</div>
JavaScript
function openClass(evt, className) {
var i, x, tablinks;
// x抓取頁面中的class="class"
x = document.getElementsByClassName("class");
//計算x的長度並將這些class="class"都進行display:none隱藏的動作
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
//tablinks 抓取頁面中的tablink
tablinks = document.getElementsByClassName("tablink");
//將tablinks代入for循環中並利用classList.remove刪除class="red" ,就是每執行一次function的時候就進行全部tablinks移除class="red"
for (i = 0; i < x.length; i++) {
tablinks[i].classList.remove("red");
}
//document.getElementById=className(函數帶進來的參數)樣式設定為display:block; 當前點擊的a link執行function 顯示出來對應的內容。
document.getElementById(className).style.display = "block";
//並對當前點擊的 a link 新增“red” 這個class
evt.currentTarget.classList.add("red");
}
//預設testbtn 這個class頁面一加載後執行click();的動作。也就是點擊了testbtn有這個class的按鈕來執行上方寫的function
var mybtn = document.getElementsByClassName("testbtn")[0];
mybtn.click();
Codepen演示
以上範例有利用到的知識點: