Слайдер в аккордионе

230
06 декабря 2018, 07:30

Имеется аккордион и в нем slick слайдер. Первый элемент раскрыт при загрузке, остальные скрыты. При клике на какой-либо из других элементов, текущий должен сворачиваться, а новых разворачиваться. Но получается так что в самом начале слайдер вроде бы инициализируется, но так как блок скрыт, при развороте блока, слайдер перекашивает, так как у него ни ширины и сдвига нет, а инициализировать при открытии если то все резко дергается.

$('.slider').slick(); 
 
$('.header').on('click', function (event) { 
 
  if (!$(this).parent().hasClass('active')) { 
    $('.item.active').find('.body').slideUp(800, function () { 
      $('.item').removeClass('active'); 
      $(event.target).closest('.item').addClass('active'); 
      var posTargetZone = $(event.target).closest('.item').offset().top; 
      var sliderBody = $(event.target).closest('.item').find('.body'); 
      sliderBody.slideDown(800, function () { 
        $('html, body').animate({ scrollTop: posTargetZone }, 300); 
      }); 
    }); 
  } 
   
});
body { 
  padding: 0; 
  margin: 0; 
} 
 
.container { 
  padding-left: 15px; 
  padding-right: 15px; 
} 
 
.item { 
  margin-bottom: 30px; 
} 
 
.item:not(.active) .body { 
  display: none; 
   
} 
 
.header { 
  height: 80px; 
  background-color: #aa66aa; 
  display: flex; 
  align-items: center; 
  padding: 0 50px; 
  cursor: pointer; 
} 
 
.body { 
   
} 
 
.slick-arrow { 
  z-index: 1; 
} 
 
.slick-prev { 
  left: 30px; 
} 
 
.slick-next { 
  right: 30px; 
} 
 
.description { 
  display: grid; 
  grid-template-columns: repeat(3, 1fr); 
  grid-gap: 20px; 
  text-align: center; 
  margin-top: 10px; 
} 
 
.desc-item { 
  background-color: #777; 
  color: #fff; 
  padding: 10px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"></script> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css" rel="stylesheet"/> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css" rel="stylesheet"/> 
<div class="container"> 
  <div class="item active"> 
    <div class="header"><span>Заголовок 1</span></div> 
    <div class="body"> 
      <div class="slider"> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
      </div> 
    </div> 
  </div> 
  <div class="item"> 
    <div class="header"><span>Заголовок 2</span></div> 
    <div class="body"> 
      <div class="slider"> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
      </div> 
    </div> 
  </div> 
  <div class="item"> 
    <div class="header"><span>Заголовок 3</span></div> 
    <div class="body"> 
      <div class="slider"> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
        <div> 
          <img src="https://picsum.photos/1000/500" alt=""> 
          <div class="description"> 
            <div class="desc-item">123</div> 
            <div class="desc-item">456</div> 
            <div class="desc-item">789</div> 
          </div> 
        </div> 
      </div> 
    </div> 
  </div> 
</div>

READ ALSO
Сделать цикл с перебором из переменной

Сделать цикл с перебором из переменной

Есть две переменнойПервая i=31; Вторая i2='2 4 5 8 9'; Как вывести цифры от 1 до 31, но без цифр указанных во второй переменной?

193
Vuex вынесение в геттеры

Vuex вынесение в геттеры

Всем привет,не получается вынести в геттеры небольшой функционал,подскажите как правильно это сделать Вот такая функция в компоненте

198
Owl courusel и табы при загрузке страницы

Owl courusel и табы при загрузке страницы

При переключении между табами, в которых есть слайдер на долю секунды показываются все слайдыМожет кто сталкивался с проблемой, как фиксить?

170
Скроллинг в iframe по кнопке JS

Скроллинг в iframe по кнопке JS

интересует такой вопросЕсть iframe, встроен на страницу WordPress, скроллинг реализовал функцией JS, т

156