Tab контрол с эффектом collapse работает не правильно

131
19 января 2019, 01:30

Нужно сделать tab-control , чтобы вкладки открывались с эффектом slideDown.
В начале все формы скрыты , нажимаем кнопку "Форма 1", открывается блок с эффектом slideDown, при нажатии кнопки "Форма 2" открывается другая форма, закрывая предыдущую. Если нажимать на одну и ту же кнопку два раза, то просто открыть - закрыть форму (типа toggleClass).
Вопрос такой,- когда я открываю первую форму, то при открытии второй она открывается снизу (а хотелось бы что бы она открывалась сверху). получается если открыть сначала вторую форму , а затем первую, то она открывается сверху, но если иначе, то вторая форма открывается снизу

Получается если открывать сначала первую потом вторую (и последующую), то они снизу открываются, если же в обратном направлении, то сверху

css

.tab-collapse-first, .tab-collapse-second,.tab-collapse-three{
    display: none;
}

HTML

<div class="col-lg-12 col-xl-12 col-md-12 col-12 p-0">
    <div class="button-wrapper-main">
        <a class="first-btn-tab btn-tab" data-target="first">Форма 1</a>
        <a class="second-btn-tab btn-tab" data-target="second">Форма 2</a>
        <a class="three-btn-tab btn-tab" data-target="three">Форма 3</a>
    </div>
</div>
<div class="col-lg-12 col-xl-12 col-md-12 col-12 p-0">
    <div class="tab-collapse-first tab-collapse">
        <p>ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА ПЕРВАЯ ФОРМА</p>
    </div>
    <div class="tab-collapse-second tab-collapse">
        <p>ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА  ВТОРАЯ ФОРМА</p>
    </div>
    <div class="tab-collapse-three tab-collapse">
        <p>Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма Третья форма </p>
    </div> 
</div>

js

$('.btn-tab').on('click',function(){
    target = $(this).attr('data-target');
    current_selector = '.tab-collapse-'+target;
    if ($(current_selector).hasClass('show-collapse')){
        $(current_selector).removeClass('show-collapse');
        $(current_selector).slideUp('fast');
    }
    else{
        hide_collapse();
        $(current_selector).addClass('show-collapse');
        $(current_selector).slideDown('fast');
    }
})
function hide_collapse(){
    $('.tab-collapse').each(function(){
        if ($(this).hasClass('show-collapse')){
            $(this).removeClass('show-collapse');
            $(this).slideUp('fast');
        }
    });
}

Функцию написал , так как количество вкладок в будущем будет расти , что бы было легче отслеживать открытые вкладки

Answer 1

Такой вариант устроит?)

$('.tab-item').on('click', function() { 
  if (!$(this).hasClass('active')) { 
    var tabIndex = $(this).index(); 
    $('.tab-item.active').removeClass('active'); 
    $(this).addClass('active'); 
 
    // 
    $('.tabs-content').slideUp('slow', function() { 
      $('.tab-content.active').removeClass('active'); 
      $('.tab-content').eq(tabIndex).addClass('active'); 
    }).slideDown('slow'); 
 
    console.clear(); 
    console.info(tabIndex); 
  } 
});
.tabs { 
  display: block; 
  width: 100%; 
  background: #ccc; 
  border-bottom: 1px solid #aaa; 
} 
 
.tabs::after { 
  content: ''; 
  display: block; 
  clear: both; 
} 
 
.tab-item { 
  display: inline-block; 
  float: left; 
  border-right: 1px solid #aaa; 
  padding: 10px 12px; 
  cursor: pointer; 
} 
 
.tab-item.active { 
  background: #aaa; 
} 
 
.tabs-content { 
  display: block; 
  width: calc(100% - 24px); 
  padding: 10px 12px; 
  background: #ccc; 
  overflow: hidden; 
} 
 
.tab-content:not(.active) { 
  display: none; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="tabs"> 
  <div class="tab-item active">tab 1</div> 
  <div class="tab-item">tab 2</div> 
  <div class="tab-item">tab 3</div> 
  <div class="tab-item">tab 4</div> 
  <div class="tab-item">tab 5</div> 
</div> 
<div class="tabs-content"> 
  <div class="tab-content active">tab content 1</div> 
  <div class="tab-content">tab content 2</div> 
  <div class="tab-content">tab content 3</div> 
  <div class="tab-content">tab content 4</div> 
  <div class="tab-content">tab content 5</div> 
</div>

READ ALSO
Eslint перестал исправлять ошибки

Eslint перестал исправлять ошибки

После обновления пакетов eslint перестал работать autofix, он находит и подчеркивает ошибки, но сам не корректируетЯ использую eslint c webpack 4

178
Как показать form при нажатии на кнопку с помощью javascript?

Как показать form при нажатии на кнопку с помощью javascript?

В общем, есть несколько одинаковых форм и кнопок под нимиИзначально формы скрыты:

145
Как исправить баг sticky topbar + выпадающие меню?

Как исправить баг sticky topbar + выпадающие меню?

Есть topbar для мобильной навигации, при скороле использую sticky от foundation, что бы прикрепить его к верхней части страницыКогда полностью открывается...

228
Поиск по таблице по названию

Поиск по таблице по названию

На странице есть таблица с валютами, вот код

197