在 Slick Slider 的 asNavFor 滑块中隐藏活动幻灯片

Hide Active Slide in `asNavFor` slider in Slick Slider

问题

有没有办法从 Slick Slider 中的滑块隐藏当前活动的幻灯片?

动机

我正在构建一个特色帖子滑块。一个 post 将突出显示,而其余 post 将在侧面的一列中作为预览显示。一次总共显示 5 post 秒。

使用 Slick Slider (1.9.0) 很容易做到这一点,但它有一个问题:"remaining posts" 部分应该 显示剩余部分posts 而不是当前的 post。 So when a post is selected it should scroll out of view in the slider, and the featured post slider will change to use the slide at the same index.

操作说明

基本上,初始状态应该是:

精选幻灯片:幻灯片 1 可见,所有其他幻灯片均隐藏。 剩余滑块:幻灯片 1 隐藏,幻灯片 2-5 可见。

如果我从“剩余滑块”中单击幻灯片 2:

精选幻灯片:幻灯片 2 可见,所有其他幻灯片均隐藏。 剩余滑块:幻灯片 2 从视图中滑出,幻灯片 3 成为新的顶部 post,然后是(按顺序)4、5、1。

JS Fiddle

这是我正在处理的 JS Fiddle:https://jsfiddle.net/zak_rhm/Lks61ah7/71/

HTML

<div id="Large_Slider">
    <!-- Should only show one slide at a time. -->
    <article class="slide">
        <h2>Slide 1</h2>
    </article>
    <article class="slide">
        <h2>Slide 2</h2>
    </article>
    <article class="slide">
        <h2>Slide 3</h2>
    </article>
    <article class="slide">
        <h2>Slide 4</h2>
    </article>
    <article class="slide">
        <h2>Slide 5</h2>
    </article>
</div>
<ul id="Small_Slider">
    <!-- Should only show four slides at a time, never show the slide in #Large_Slider -->
    <li id="slide">Slide 1</li>
    <li id="slide">Slide 2</li>
    <li id="slide">Slide 3</li>
    <li id="slide">Slide 4</li>
    <li id="slide">Slide 5</li>
</ul>

JavaScript (jQuery)

var $slider_lg = $("#Large_Slider")
var $slider_sm = $("#Small_Slider")

$slider_lg.slick({
  slidesToShow: 1,
  slidesToScroll: 1,
  asNavFor: '#Small_Slider',
  dots: true,
  fade: true
});

$slider_sm.slick({
  arrows: false,
  slidesToShow: 4,
  slidesToScroll: 1,
  asNavFor: '#Large_Slider',
  focusOnSelect: true,
  vertical: true,
  verticalSwiping: true
});

这应该可以满足您的需求:https://jsfiddle.net/kmsv5xn8/

我更改了您的 HTML,以便 "Small_Slider" 部分从 #2 开始并且每张幻灯片都有一个 data-sm-slide 属性:

<ul id="Small_Slider" class="slick-slider">
  <li id="sm-slide-2" class="slide slide--sm" data-sm-slide="2">
    <img src="https://via.placeholder.com/640x480.png/0f9/333?text=Slide+2" alt="Slide 2" height="48" width="64" class="slide--sm__img" />
    <span class="slide--sm__title">Slide 2</span>
  </li>
  <li id="sm-slide-3" class="slide slide--sm" data-sm-slide="3">
    <img src="https://via.placeholder.com/640x480.png/f09/fff?text=Slide+3" alt="Slide 3" height="48" width="64" class="slide--sm__img" />
    <span class="slide--sm__title">Slide 3</span>
  </li>
  <li id="sm-slide-4" class="slide slide--sm" data-sm-slide="4">
    <img src="https://via.placeholder.com/640x480.png/f90/333?text=Slide+4" alt="Slide 4" height="48" width="64" class="slide--sm__img" />
    <span class="slide--sm__title">Slide 4</span>
  </li>
  <li id="sm-slide-5" class="slide slide--sm" data-sm-slide="5">
    <img src="https://via.placeholder.com/640x480.png/90f/fff?text=Slide+5" alt="Slide 5" height="48" width="64" class="slide--sm__img" />
    <span class="slide--sm__title">Slide 5</span>
  </li>
  <li id="sm-slide-1" class="slide slide--sm" data-sm-slide="1">
    <img src="https://via.placeholder.com/640x480.png/09f/333?text=Slide+1" alt="Slide 1" height="48" width="64" class="slide--sm__img" />
    <span class="slide--sm__title">Slide 1</span>
  </li>
</ul>

这会处理初始偏移量,但是为了显示正确的幻灯片,我禁用了 focusOnSelect: true 属性 并添加了一个事件侦听器:

$slider_sm.on("click", "li.slide", function() {
  var slideNo = $(this).attr("data-sm-slide") - 1;
  $slider_lg.slick("slickGoTo", slideNo);
})

相应的幻灯片索引取自data-*属性并更新主轮播;因为它使用 asNavFor 属性,Slick 会处理剩下的事情。

只需在 .slick-current 添加样式即可 class

#Small_Slider .slick-current {
  opacity: 1;
  visibility: hidden;
  width:0px !important;
  height: 0px !important;
}