【问题标题】:Slick.js margins on active slide活动幻灯片上的 Slick.js 边距
【发布时间】:2020-08-24 05:43:45
【问题描述】:

我正在使用 Slick 幻灯片。我对活动幻灯片应用了比例 2,但是当幻灯片的大小发生变化时,左右边距不会移动。我该如何解决?

我在活动幻灯片上发现页边距的示例:https://codepen.io/jinzagon/pen/KKzaQwz

我的代码:https://codepen.io/jinzagon/pen/YzqpdLj

HTML

<section class="top_slider">
  <div>
    <a href="google.com"><img src="http://placehold.it/288x288?text=1"></a>
  </div>
  <div>
    <img src="http://placehold.it/288x288?text=2">
  </div>
  <div>
    <img src="http://placehold.it/288x288?text=3">
  </div>
  <div>
    <img src="http://placehold.it/288x288?text=4">
  </div>
  <div>
    <img src="http://placehold.it/288x288?text=1">
  </div>
</section>

CSS

.slider {
  background-color: white;
  margin: 100px auto;
  height: auto!important;
}

.slick-slide {
  margin: 0px 20px;
}

.slick-slide img {
  width: 80%;
  transition: all linear 0.4s;
}

.slick-center img {
  transform: scale(2);
  transition: all linear 0.4s;
}

JS

$(".top_slider").slick({
  dots: true,
  infinite: false,
  centerMode: true,
  slidesToShow: 3,
  slidesToScroll: 1,
});

$('html').animate({
  scrollTop: $('.top_slider').offset().top
}, 500);

【问题讨论】:

  • 您正在缩放图像,他们正在缩放幻灯片。请注意,更改幻灯片的变换将导致问题,如 jinzagon 示例中所示。此外,他们正在更改光滑的 CSS 以使用 display: flex 而不是 float。如果您更喜欢 flex,我建议您改用 Swiper 滑块,因为它是现代滑块而不是 slick。
  • @Rado 我明白了。那么还有其他选择吗?我只想运行 Slick Slide,不关心显示。
  • 如果你去掉.slick-center样式,它会正常工作。如果您想要对活动幻灯片进行转换,我们必须找到一种解决方法。
  • 你说的是我的例子还是 Jinzagon 的例子?
  • 当你删除样式 `.slick-center img { transform: scale(2);过渡:全线性0.4s; } Slick 工作正常。

标签: javascript html jquery css slick.js


【解决方案1】:

我模仿它,将所有幻灯片缩放为 50%,活动幻灯片缩放为 100%。另外,添加类 .slide 的内部 div,以便我们可以对其进行转换。这样,我们就不会干扰精巧的计算。

您可以根据自己的意愿使用比例值。

$(".top_slider").slick({
  dots: true,
  infinite: false,
  centerMode: true,
  slidesToShow: 3,
  slidesToScroll: 1,
});

$('html').animate({
  scrollTop: $('.top_slider').offset().top
}, 500);
.slider {
  background-color: white;
  margin: 100px auto;
  height: auto!important;
}

.slide {
  transform: scale(.5);
  transition: transform linear 0.15s;
}

.slick-center .slide {
  transform: scale(1);
}

.slick-list {
  overflow: visible;
}


/* This should be included in your reset/normalize file */

img {
  max-width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" />

<section class="top_slider">
  <div>
    <div class="slide">
      <img src="http://placehold.it/288x288?text=1">
    </div>
  </div>
  <div>
    <div class="slide">
      <img src="http://placehold.it/288x288?text=2">
    </div>
  </div>
  <div>
    <div class="slide">
      <img src="http://placehold.it/288x288?text=3">
    </div>
  </div>
  <div>
    <div class="slide">
      <img src="http://placehold.it/288x288?text=4">
    </div>
  </div>
  <div>
    <div class="slide">
      <img src="http://placehold.it/288x288?text=5">
    </div>
  </div>
</section>

【讨论】:

  • 非常感谢。虽然边距有点太大,但我希望元素之间的边距更小。
  • 你可以做.slide { transform: scale(.8); } 这样仿的边距会更小。
  • 我明白了,但是我不能修改页边距?
  • 这个想法是你只缩放内部元素,而父元素保持它的大小。这样,我们就不会改变父级的大小(在本例中为 .slick-slide),也不会干扰平滑计算。目前幻灯片之间没有空间。您可以根据需要添加边距,但这会增加幻灯片之间的视觉差距。
  • 我完全理解你做了什么。我将不得不感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多