관리 메뉴

프론트엔드 정복하기

탭 기능 구현하는 방법 - JS ver 본문

JavaScript

탭 기능 구현하는 방법 - JS ver

GROWNFRESH 2021. 1. 26. 09:15

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