【问题标题】:slick carousel with different "slidesToShow" at different positions在不同位置具有不同“slidesToShow”的光滑轮播
【发布时间】:2021-01-07 14:07:36
【问题描述】:

我想要一个slick carousel,在某些位置,它显示 3 张幻灯片,而在其他位置,它显示 1 张幻灯片。这是我尝试过的:

$(".carousel").slick({
  // IMPORTANT
  variableWidth: true,
  // not so important
  dots: true,
  appendArrows: $(".carousel-arrows"),
  nextArrow: "<button>Next</button>",
  prevArrow: "<button>Previous</button>"
});

$(".wanted-behavior").click(function() {
  $(".carousel").slick("slickGoTo", 0, true);
  setTimeout(function() {$(".carousel").slick("slickPrev");}, 500)
  setTimeout(function() {$(".carousel").slick("slickNext");}, 2000)
});
$(".unwanted-behavior").click(function() {
  $(".carousel").slick("slickGoTo", 1, true);
  setTimeout(function() {$(".carousel").slick("slickNext");}, 500)
  setTimeout(function() {$(".carousel").slick("slickNext");}, 1500)
  setTimeout(function() {$(".carousel").slick("slickNext");}, 2500)
  setTimeout(function() {$(".carousel").slick("slickPrev");}, 4000)
});
/* IMPORTANT */
.carousel-img {
  width: 33vw!important;
}
.carousel-img-big {
  width: 100vw!important;
}

/* not so important */
.carousel-img img,
.carousel-img-big img {
  width: 100%;
  object-fit: cover;
  height: 200px;
}
<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" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">

<div class="carousel-arrows"></div>
<div class="carousel">
  <div class="carousel-img"><img src="https://picsum.photos/200"></div>
  <div class="carousel-img"><img src="https://picsum.photos/201"></div>
  <div class="carousel-img"><img src="https://picsum.photos/202"></div>
  <div class="carousel-img"><img src="https://picsum.photos/203"></div>
  <div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
</div>

<button class="wanted-behavior" type="button">Wanted Behaviour</button>
<button class="unwanted-behavior" type="button">Unwanted Behaviour</button>

这只是使用光滑轮播的variableWidth选项,其中幻灯片设置为33vw,一个设置为100vw
问题在于,轮播的某些位置只显示了我不想要的大 (100vw) 幻灯片的一小部分。屏幕上应该有 3 张幻灯片或一张大幻灯片。我添加了按钮来显示它的想要和不需要的行为。
所以一般来说,我的问题是:

我怎样才能拥有slick carousel,不同位置显示不同数量的幻灯片?

也许有一些与我上面尝试过的完全不同的方法有效,这正是我尝试过的。
感谢您的任何反馈!

【问题讨论】:

    标签: javascript jquery css slick.js


    【解决方案1】:

    我是这个问题的创造者......我实际上已经找到了答案,我只是觉得我想做的简单事情过于复杂,我相信有更好的方法。但是由于这个帖子没有太多的活动,我还是会给出我的答案(虽然我不会接受)。

    继续我在问题中尝试的方法,我有一个带有variableWidth 选项的光滑轮播,幻灯片占用33vw,除了一个占用100vw

    $(".carousel").slick({
      // IMPORTANT
      variableWidth: true,
      // not so important
      dots: true,
      appendArrows: $(".carousel-arrows"),
      nextArrow: "<button>Next</button>",
      prevArrow: "<button>Previous</button>"
    });
    
    $(".wanted-behavior").click(function() {
      $(".carousel").slick("slickGoTo", 0, true);
      setTimeout(function() {$(".carousel").slick("slickPrev");}, 500)
      setTimeout(function() {$(".carousel").slick("slickNext");}, 2000)
    });
    $(".unwanted-behavior").click(function() {
      $(".carousel").slick("slickGoTo", 1, true);
      setTimeout(function() {$(".carousel").slick("slickNext");}, 500)
      setTimeout(function() {$(".carousel").slick("slickNext");}, 1500)
      setTimeout(function() {$(".carousel").slick("slickNext");}, 2500)
      setTimeout(function() {$(".carousel").slick("slickPrev");}, 4000)
    });
    /* IMPORTANT */
    .carousel-img {
      width: 33vw!important;
    }
    .carousel-img-big {
      width: 100vw!important;
    }
    
    /* not so important */
    .carousel-img img,
    .carousel-img-big img {
      width: 100%;
      object-fit: cover;
      height: 200px;
    }
    <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" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">
    
    <div class="carousel-arrows"></div>
    <div class="carousel">
      <div class="carousel-img"><img src="https://picsum.photos/200"></div>
      <div class="carousel-img"><img src="https://picsum.photos/201"></div>
      <div class="carousel-img"><img src="https://picsum.photos/202"></div>
      <div class="carousel-img"><img src="https://picsum.photos/203"></div>
      <div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
    </div>
    
    <button class="wanted-behavior" type="button">Wanted Behaviour</button>
    <button class="unwanted-behavior" type="button">Unwanted Behaviour</button>

    然后我添加的是一个检查,每次在幻灯片更改之前,它都会询问它想要转到的幻灯片是否是“错误位置”,如果是,它会跳过“错误位置”到下一个“好位置”。最后,如果轮播启用了dots,我们需要删除与“坏位置”对应的点,所以我们也这样做。结果是这样的:

    $(".carousel").slick({
      // IMPORTANT
      variableWidth: true,
      // not so important
      dots: true,
      appendArrows: $(".carousel-arrows"),
      nextArrow: "<button>Next</button>",
      prevArrow: "<button>Previous</button>"
    });
    
    // IMPORTANT
    
    $($(".carousel .slick-dots").children().get().slice(2, 4)).css("display", "none");
    
    $(".carousel").on('beforeChange', function(event, slick, currentSlide, nextSlide){
      if ((nextSlide==2 || nextSlide==3) && (currentSlide!=4)) {
        $(".carousel").slick("slickSetOption", "waitForAnimate", false)
        setTimeout(function() {
          $(".carousel").slick("slickGoTo", 4, false);
          $(".carousel").slick("slickSetOption", "waitForAnimate", true);
        }, 1);
      } else if ((nextSlide==2 || nextSlide==3) && (currentSlide==4)) {
        $(".carousel").slick("slickSetOption", "waitForAnimate", false)
        setTimeout(function() {
          $(".carousel").slick("slickGoTo", 1, false);
          $(".carousel").slick("slickSetOption", "waitForAnimate", true);
        }, 1);
      };
    });
    /* IMPORTANT */
    .carousel-img {
      width: 33vw!important;
    }
    .carousel-img-big {
      width: 100vw!important;
    }
    
    /* not so important */
    .carousel-img img,
    .carousel-img-big img {
      width: 100%;
      object-fit: cover;
      height: 200px;
    }
    <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" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">
    
    <div class="carousel-arrows"></div>
    <div class="carousel">
      <div class="carousel-img"><img src="https://picsum.photos/200"></div>
      <div class="carousel-img"><img src="https://picsum.photos/201"></div>
      <div class="carousel-img"><img src="https://picsum.photos/202"></div>
      <div class="carousel-img"><img src="https://picsum.photos/203"></div>
      <div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2017-11-29
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多