"Предыдущий / следующий слайд" помещает границу вокруг текущего "предварительного просмотра под основной каруселью"

Использование Slick-Slider:

У меня есть главная карусель с мини-обзором NAV ниже. Это выглядит так:

мой слайдер с предварительным просмотром навигации ниже] ([Imgur

Что работает до сих пор:

При нажатии на предварительный просмотр все работает хорошо. Основная карусель переходит к тому, что щелкнуло "предварительный просмотр внизу", а граница CSS переходит к текущему "щелчку", по которому щелкают.

Как это устроено:

Я думаю, что это достигается путем перемещения класса.slick-current в основной карусели и в окне предварительного просмотра ниже. Так что в jquery может быть removeClass() и addClass().

Проблема:

При использовании стрелок prev/next основной карусели или пролистывания для перехода к предыдущему или следующему слайду "предварительный просмотр внизу" не обновляет текущий слайд с пурпурной рамкой css из-за того, что класс.slick-current не перемещается к текущему на предварительный просмотр ниже.

Как работает граница css:

В настоящее время у меня есть правило CSS, которое

.slider-nav .slick-current img {
  border: 1px solid #A279B6;
}

Так как класс.slick-current работает при нажатии на предварительный просмотр навигации, тогда применяется граница. Однако это не работает при использовании стрелок предыдущей / следующей основной карусели или смахивания.

Как я пытался решить это:

Я попытался с помощью события onAfterChange() slick-slider, которое принимает параметр (currentSlide). Я использую currentSlide, чтобы получить индекс текущего слайда.

Затем я получаю текущий индекс слайдов "предварительного просмотра" с

activeNavSlide = $(.slider-nav).slick('slickCurrentSlide');

Большой! Я могу console.log и да, я вижу, что, когда я нажимаю на предварительный просмотр навигации, индексы обоих остаются в синхронизации. Однако изменение основной карусели показывает, что основной индекс карусели изменяется, в то время как предварительный просмотр навигации не... из-за того, что.slick-current не перемещается в предыдущий / следующий предварительный просмотр.

Вот мой код до сих пор:

<script type="text/javascript">
  $(document).ready(function(){
    $('.carousel-viewer').slick();
    // Mini Carousel Nav Preview
    console.log($('.slider-nav').children('div').length);
    if($('.slider-nav').children('div').length == 1) {
      $('.slider-nav').addClass('removeNav');
    } else if($('.slider-nav').children('div').length == 2){
      $('.slider-nav').slick({
        slidesToShow: 2,
        slidesToScroll: 1,
        asNavFor: '.carousel-viewer',
        dots: false,
        arrows: false,
        centerMode: true,
        focusOnSelect: true
      });
    } else {
      $('.slider-nav').slick({
        slidesToShow: 3,
        slidesToScroll: 1,
        asNavFor: '.carousel-viewer',
        dots: false,
        // arrows: false,
        centerMode: true,
        focusOnSelect: true
      });
    }

    //Check to see if index's of both stay in sync
    $('.carousel-viewer').on('beforeChange', function(event, slick, currentSlide, nextSlide) {
    activeNavSlide =   $('.slider-nav').slick('slickCurrentSlide');
    activeNavSlide = currentSlide;
    if(activeNavSlide == currentSlide) {
      alert('Match!');
    }
    })
  });
</script>

Я ожидаю, что смогу использовать стрелки предыдущей / следующей основной карусели или проведя пальцем, чтобы переместить класс.slick-current в "предварительном просмотре навигации ниже" и, таким образом, поставить рамку css вокруг текущего синхронизированного индекса.

Ваше мнение очень ценится!

1 ответ

Я предложил jquery, который решает мою проблему и на данный момент работает нормально, но я уверен, что есть более эффективный (более сухой) способ написания этого кода. Хотелось бы получить отзыв о том, как я могу вывести это на следующий уровень!

Я должен был учитывать динамические условия, когда у меня может быть до десяти слайдов, так что вот что у меня пока работает:

<script type="text/javascript">
  $(document).ready(function(){
    $('.carousel-viewer').slick();
    // Mini Carousel Nav Preview
    console.log($('.slider-nav').children('div').length);

    if($('.slider-nav').children('div').length == 1) {
      $('.slider-nav').addClass('removeNav');
    } else {
      $('.slider-nav').slick({
        slidesToShow: $('.slider-nav').children('div').length,
        slidesToScroll: 1,
        asNavFor: '.carousel-viewer',
        dots: false,
        // arrows: false,
        centerMode: true,
        focusOnSelect: true
      });
    }

    // Sync both main slider and nav thumnail(s) slider
    $('.carousel-viewer').on('afterChange', function(event, slick, currentSlide) {

      activeNavSlide =   $('.slider-nav').slick('slickCurrentSlide');
      activeNavSlide = currentSlide;

      console.log('mainSlide is: ' + currentSlide + ' navSlide is: ' + activeNavSlide);

      if($('.slider-nav .slick-track').children('div').length == 10) {

        // FOR TEN PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 9).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 9).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if($('.slider-nav .slick-track').children('div').length == 9) {

        // FOR NINE PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 8).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 8).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if ($('.slider-nav .slick-track').children('div').length == 8) {

        // FOR EIGHT PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 7).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 7).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if ($('.slider-nav .slick-track').children('div').length == 7) {

        // FOR SEVEN PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 6).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 6).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if ($('.slider-nav .slick-track').children('div').length == 6) {

        // FOR SIX PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 5).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 5).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if ($('.slider-nav .slick-track').children('div').length == 5) {

        // FOR FIVE PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 4).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 4).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else if ($('.slider-nav .slick-track').children('div').length == 4) {

        // FOR FOUR PAGES
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 3).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide + 3).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      } else {

        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 2).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide - 1).removeClass('slick-current');
        $('.slider-nav .slick-track').children('div').eq(activeNavSlide).addClass('slick-current');

      }

    })

  });
</script>
Другие вопросы по тегам