Tab

[data-tab]

기본 탭

tab1
tab1
tab2
tab3
tab4
tab2
tab3
tab4
<!-- role은 script 처리. -->
<div class="nav-tab" data-tab="group1">
    <!-- button에 id가 없으면 스크립트로 부여됨. -->
    <!-- tabindex, aria-selected, aria-controls 스크립트로 부여됨. -->
    <button type="button" class="on" data-tab-trigger="#tab1">Tab1</button>
    <button type="button" data-tab-trigger="#tab2">Tab2</button>
    <button type="button" data-tab-trigger="#tab3">Tab3</button>
    <button type="button" data-tab-trigger="#tab4">Tab4</button>
</div>

<!-- tabindex, aria-labelledby 스크립트로 부여됨. -->
<div id="tab1" data-tab-target="group1">
    tab1
</div>
<div id="tab2" data-tab-target="group1">
    tab2
</div>
<div id="tab3" data-tab-target="group1">
    tab3
</div>
<div id="tab4" data-tab-target="group1">
    tab4
</div>

No Animation Tab

[data-tab][data-animation="false"]

애니메이션 효과 없는 탭

tab5
tab6
tab7
tab8

Events

시점에 따른 이벤트

document.querySelectorAll('[data-tab]').forEach(function (el) {
    /* e.trigger: [data-tab-trigger]
     * e.target: [data-tab-target]
     */
    // 열릴 때
    el.addEventListener('tab.showing', function (e) {
        console.log(e.target, e.trigger, 'showing');
    })
    // 열린 후
    el.addEventListener('tab.shown', function (e) {
        console.log(e.target, e.trigger, 'shown');
    })
    // 닫힐 때
    el.addEventListener('tab.hiding', function (e) {
        console.log(e.target, e.trigger, 'hiding');
    })
    // 닫힌 후
    el.addEventListener('tab.hidden', function (e) {
        console.log(e.target, e.trigger, 'hidden');
    })
})

Method

Component 호출(feat. 비동기)

const tabEl = document.querySelector('[data-tab="group1"]');
const tab = new SKY.Tab(tabEl);

특정 탭 열기

tab.show(1); // number
tab.show('#tab2'); // string
tab.show(document.querySelector('#tab2')); // object