I play using the Javascript tab system.
When the width of the window falls below a certain breakpoint, the contents of the tab are inserted after the links for the layout of the accordion, and the process reverses as you increase the width of the window.
Everything works the way you reduce the size of the window, but it breaks when you increase the width of the window. The following code is causing the problem tabBody.appendChild( tabBodyItems[k] );.
Only 2 of 3 .c-Tabs_BodyItemappend elements ???
HTML
<div class="c-Tabs" id="js-Tabs">
<div class="o-Container">
<div class="o-Row c-Tabs_Head">
<div class="o-Col-sm-4 c-Tabs_HeadItem">
<a href="" class="c-Tabs_Link">Link 1</a>
</div>
<div class="o-Col-sm-4 c-Tabs_HeadItem is-active">
<a href="" class="c-Tabs_Link">Link 2</a>
</div>
<div class="o-Col-sm-4 c-Tabs_HeadItem">
<a href="" class="c-Tabs_Link">Link 3</a>
</div>
</div>
<div class="c-Tabs_Body">
<div class="c-Tabs_BodyItem">
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
<div class="c-Tabs_BodyItem is-active">
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
<div class="c-Tabs_BodyItem">
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
</div>
</div>
</div>
Javascript
I will not show Javascript for a real tab system; it does not cause a problem.
function insertAfter( el, referenceNode )
{
referenceNode.parentNode.insertBefore( el, referenceNode.nextSibling );
}
function debounce( func, wait, immediate )
{
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
var tabHeadItems = document.getElementsByClassName( 'c-Tabs_HeadItem' );
var tabBody = document.querySelector( '.c-Tabs_Body' );
var tabBodyItems = document.getElementsByClassName( 'c-Tabs_BodyItem' );
var isTabs = true;
function setTab()
{
if ( window.matchMedia( '(min-width: 768px)' ).matches && isTabs === false )
{
for( var k = 0, lenK = tabBodyItems.length; k < lenK; k++ )
{
tabBody.appendChild( tabBodyItems[k] );
}
isTabs = true;
}
else if ( window.matchMedia( '(max-width: 767px)' ).matches && isTabs === true )
{
for( var l = 0, lenL = tabBodyItems.length; l < lenL; l++ )
{
insertAfter( tabBodyItems[l], tabHeadItems[l] );
}
isTabs = false;
}
}
setTab();
var debounceSetTab = debounce(function() {
setTab();
}, 250 );
window.addEventListener( 'resize', debounceSetTab );
source
share