프론트엔드 정복하기
탭 기능 구현하는 방법 - JS ver 본문
HTML
/** 탭 Nav Bar **/
<div class="tabs is-toggle is-fullwidth" id="tabs">
<ul>
<li class="is-active" data-tab="1">
<a>
<span class="icon is-small"><i class="fa fa-image"></i></span>
<span>Pictures</span>
</a>
</li>
<li data-tab="2">
<a>
<span class="icon is-small"><i class="fa fa-music"></i></span>
<span>Music</span>
</a>
</li>
</ul>
</div>
/** 탭 Contents **/
<div id="tab-content">
<p class="is-active" data-content="1">
Pictures
</p>
<p data-content="2">
Music
</p>
</div>
CSS
#tab-content p {
display: none;
}
#tab-content p.is-active {
display: block;
}
Javascript
const TABS = [...document.querySelectorAll('#tabs li')];
const CONTENT = [...document.querySelectorAll('#tab-content p')];
const ACTIVE_CLASS = 'is-active';
function initTabs() {
TABS.forEach((tab) => {
tab.addEventListener('click', (e) => {
let selected = tab.getAttribute('data-tab');
updateActiveTab(tab);
updateActiveContent(selected);
})
})
}
function updateActiveTab(selected) {
TABS.forEach((tab) => {
if (tab && tab.classList.contains(ACTIVE_CLASS)) {
tab.classList.remove(ACTIVE_CLASS);
}
});
selected.classList.add(ACTIVE_CLASS);
}
function updateActiveContent(selected) {
CONTENT.forEach((item) => {
if (item && item.classList.contains(ACTIVE_CLASS)) {
item.classList.remove(ACTIVE_CLASS);
}
let data = item.getAttribute('data-content');
if (data === selected) {
item.classList.add(ACTIVE_CLASS);
}
});
}
initTabs();
'JavaScript' 카테고리의 다른 글
JS | 배열 관련 메소드 (0) | 2021.01.26 |
---|---|
JS | 할당 연산자 (0) | 2021.01.26 |
ajax | parse와 stringify (0) | 2020.12.24 |
리다이렉트(redirect) 이벤트 (0) | 2020.12.11 |
onload 등 이벤트 중지하기 (0) | 2020.12.08 |