Slick slider не загружает слайды, если slidesToShow равно общему количеству слайдов?

#php #jquery #html #css

#php #jquery #HTML #css

Вопрос:

Я использую slick slider в своем проекте, он работал нормально, пока slidesToShow не стало меньше общего количества слайдов. Но теперь я сталкиваюсь с этой проблемой, когда slidesToShow равно общему количеству слайдов, он даже не отображает слайды должным образом. Вот картинка, как это отображается:

введите описание изображения здесь

Как вы можете видеть на картинке, слайды по математике даже не отображаются должным образом, хотя в нем всего семь слайдов, а физика отображается правильно, потому что в нем 8 слайдов. Я не понимаю, в чем проблема.

Вот мой php-код:

  <div class="slick-1"> 
    <?php $data = new WP_QUERY($args);
     $unique_chapter = array();
     while($data->have_posts()):
      $data->the_post();
      $chapter_obj = get_field('chapter');
      $chapter_obj_image = get_field('chapter', false, false);
      if( ! in_array( $chapter_obj, $unique_chapter ) ) :
      $unique_chapter[] = $chapter_obj;
     ?>
     <div class="col-xs-6 col-sm-6 col-md-4 col-lg-12">
     <a id="chapter-link" href="<?php echo get_permalink($post->ID) ?>">
        <div class="sub-slik-img-sty">
           <?php if(!empty($chapter_obj_image))echo get_the_post_thumbnail( 
             $chapter_obj_image, 'full' ); ?></div>
        <div class="text-left chapter_heading">
         <?php  if(!empty($chapter_obj))echo substr($chapter_obj->post_title,0,9) ;?></div>
        <div class="text-left chapter_text">
         <?php  if(!empty($chapter_obj))echo $chapter_obj->post_content ;?> 
    </div>
    </a>
    </div>
    <?php endif; ?>
    <?php endwhile;  ?>
    </div>
  

Это мой JS-код:

     jQuery(document).ready(function($) {
      $('.slick-1').slick({
        dots: false,
        infinite: true,
        speed: 500,
        slidesToShow: 7,
        slidesToScroll: 1,
        autoplay: true,
        autoplaySpeed: 2000,
        arrows: false,
        responsive: [
        {
          breakpoint: 1200,
          settings: {
            slidesToShow: 7,
            slidesToScroll: 1
          }
        },
            {
          breakpoint: 1024,
          settings: {
            slidesToShow: 6,
            slidesToScroll: 1
          }
        },
            {
          breakpoint: 992,
          settings: {
            slidesToShow: 5,
            slidesToScroll: 1
          }
        },

        {
          breakpoint: 768,
          settings: {
            slidesToShow: 4,
            slidesToScroll: 1
          }
        },

        {
          breakpoint: 600,
          settings: {
            slidesToShow: 2,
            slidesToScroll: 1
          }
        },
        {
           breakpoint: 400,
           settings: {
              arrows: false,
              slidesToShow: 2,
              slidesToScroll: 1
           },

        }]
    });
});
  

Я попытался проверить после функции ready, если общее количество слайдов меньше 7, чем у clone slides, но это не сработало, потому что слайды динамически загружаются через цикл while, когда я получаю длину slick-1 div, он показывает 5, потому что из базы данных поступают данные по 5 темам, поэтому он клонирует слайды по другим темам, которые мне также не нужны.Я даже не могу добавить еще одну главу, потому что в математическом предмете всего 7 глав. Есть ли какой-либо способ, которым я могу добавить один дополнительный слайд-клон только по математическому предмету. Пожалуйста, помогите мне, я буду вам очень благодарен.
Это демонстрационный слайдер Demo Slider

Комментарии:

1. Пожалуйста, поделитесь полным кодом в codepen.

2. @Tushar Kumawat вот всего 4 фотографии, если вы измените slidestoshow на 4 слайда, они не будут перемещаться, если установлено значение 3 слайда, они будут перемещаться. вот ссылка на codepen codepen.io/Sameed-Ul-Hassan/pen/xBqwNK

3. хорошо, но чего ты хочешь?

4. проблема в том, что когда slideToShow равно общему количеству слайдов, то слайдер не загружался должным образом и не скользил, я хочу знать, есть ли исправление для этого, чтобы я мог заставить слайдер скользить, даже если slideToShow равно общему количеству слайдов.

Ответ №1:

Я понял это сам. Все, что вам нужно сделать, это просто изменить это условие в complete slick.js файл из этого:

  _.slideCount > _.options.slidesToShow 
  

К этому

  _.slideCount >= _.options.slidesToShow 
  

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

Комментарии:

1. Есть ли какой-либо способ, которым мы не переопределяем файл кода, чтобы устранить проблему

Ответ №2:

К сожалению, это ошибка в Slick. Одним из решений является простое повторение элементов, чтобы было по крайней мере на один больше, чем слайдов. Может быть достигнуто добавлением этого кода перед инициализацией slick:

     let maxSlidesToShow = 7;
    while ($('.slick-1 > div').length <= maxSlidesToShow) {
      $('.slick-1 > div').each(function() {
        $(this).clone().appendTo('.slick-1');
      });
    }
  

Слайды повторяются столько раз, сколько требуется, поэтому всегда есть по крайней мере на один слайд больше, чем показано слайдером.

Ответ №3:

Я думаю, что лучшее решение — сделать это необязательным:
введите новый параметр по умолчанию

 _.defaults = {
   loopIfEqual: false,
  

затем измените все

 _.slideCount > _.options.slidesToShow
  

Для

 ( (_.slideCount > _.options.slidesToShow) || (loopIfEqual amp;amp; ( _.slideCount == _.options.slidesToShow )) )
  

и при необходимости добавляйте "loopIfEqual": true в свои slick-data.

Ответ №4:

Я исправил проблему с помощью следующего кода.

 var totalSlides = $('.view-id-faculty_carousel.view-display-id-block_1 > .view-content .views-row').length;
  // Faculty Carousel
  $('.view-id-faculty_carousel.view-display-id-block_1 > .view-content').slick({
    infinite: true,
    slidesToShow: totalSlides >= 4 ? 4 : totalSlides,
    slidesToScroll: 1,
    responsive: [
      {
        breakpoint: 991,
        settings: {
          slidesToShow: totalSlides >= 3 ? 3 : totalSlides,
          slidesToScroll: 3,
          infinite: true,
          dots: true
        }
      },
      {
        breakpoint: 767,
        settings: {
          slidesToShow: totalSlides >= 2 ? 2 : totalSlides,
          slidesToScroll: 2
        }
      },
      {
        breakpoint: 480,
        settings: {
          slidesToShow: 1,
          slidesToScroll: 1
        }
      }
    ]
  });