私はJavascriptタブシステムで遊んでいます。バニラJavascriptウィンドウ上の要素を操作するサイズ変更
ウィンドウの幅があるブレークポイントを下回ると、タブの内容がアコーディオンレイアウトのリンクの後ろに挿入され、ウィンドウの幅を増やすとプロセスが逆になります。
すべての機能は、ウィンドウのサイズを小さくすると意図したとおりに動作しますが、ウィンドウの幅を大きくすると壊れます。次のコードは、問題の原因となっていますtabBody.appendChild(tabBodyItems[k]);
。
3つのうち2つのみが.c-Tabs_BodyItem
に追加されますか?
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を
私は、実際のタブ移動システムのためのJavascriptを表示されません。これは問題の原因ではありません。
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);
あなたは 'insertAfter'、質問で' debounce'のテキストを含めることはできますか? – guest271314
@ guest271314 done :) –
@ guest271314これです。タイプミスとして閉じる投票。 :) – Siguza