【问题标题】:Slick Slider - Applying slick active class to <a> according to active slideSlick Slider - 根据活动幻灯片将 slick 活动类应用于 <a>
【发布时间】:2017-08-15 09:35:03
【问题描述】:

当幻灯片被拖动时,我试图将“slick active”类添加到 a 标签。该类在单击时应用,但无法弄清楚如何将其应用到另一个!

我们将不胜感激任何破译我的代码的帮助!

JS

$(document).ready(function() {

    var $slideshow = $(".slider").slick({
        dots: false,
        infinite: true,
        speed: 300,
        slidesToShow: 1,
        adaptiveHeight: true,
        swipeToSlide: true,
        touchThreshold: 3,
        arrows: false
    });

    $('.links').on('click', 'a', function( e ) {
        var slideIndex = $(this).closest('li').index();

        $slideshow.slick( 'slickGoTo', parseInt( slideIndex ) );
        $('.links li a').removeClass('slick-current');
        $(this).addClass('slick-current');
        e.preventDefault();
    });


    $('.slider').on('afterChange', function(event,slick,i) {
        $('.links li a .slick-slide').removeClass('slick-current');
        $('.links li a .slick-slide').eq(i).addClass('slick-current');  
    });

    $('.links li a .slick-slide').eq(0).addClass('slick-current');  

});

HTML

 <div class="large-3 columns page-content-left">

      <ul class="links">
           <li><a href="#">slide1</a></li>
           <li><a href="#">slide2</a></li>
           <li><a href="#">slide3</a></li>

      </ul>

 </div>

<div id="" class="large-9 columns page-content-right">                             
   <section class="slider" id="slider1">

      <div class="slide">
      </div>
      <div class="slide">
      </div>
      <div class="slide">
      </div>

  </section>
</div>

【问题讨论】:

  • 根据kenwheeler.github.io/slickafterChange 事件有 3 个参数:slickcurrentSlidenextSlide。您正在使用 event、slick 和 i。也许您在eq() 中使用了一些无效数据?我猜你必须做$(currentSlide).addClass('slick-current'),但我还没有测试过。

标签: javascript jquery html slick.js


【解决方案1】:

您必须将类 slick-initialized 添加到 links

我们没有您的 HTML,但它应该看起来像这样:

<div class="links slick-initialized">
  <li><a><span class="slick-slide">1</span></a></li>
  <li><a><span class="slick-slide">2</span></a></li>
  <li><a><span class="slick-slide">3</span></a></li>
</div>

更新

现在我们有了 HTML,很清楚为什么您仍然有问题。您使用$('.links li a .slick-slide') 设置类。这与我上面的代码相匹配,但是你有不同的结构。

      <ul class="links">
           <li><a href="#">slide1</a></li>
           <li><a href="#">slide2</a></li>
           <li><a href="#">slide3</a></li>
      </ul>

首先你得把它改成

  <ul class="links slick-initialized">
       <li><a href="#" class="slick-slide">slide1</a></li>
       <li><a href="#" class="slick-slide">slide2</a></li>
       <li><a href="#" class="slick-slide">slide3</a></li>
  </ul>

然后将 jquery 更改为 $('.links li a.slick-slide')(删除 a.slick-slide 之间的空格)。

【讨论】:

  • 我也在那里添加了我的 HTML!但我尝试添加 slick-initialized 但没有运气。
  • @BenjiBaird 似乎 HTML 结构和 jQuery 选择器不匹配。我在答案中添加了一些解释。
  • @BenjiBaird 你看过我的评论了吗?应该够了。
  • @arcs 效果很好,但又遇到了另一个问题。活动类仅适用于第一个滑块...我在一个页面上的选项卡中有多个滑块。所以活动类适用于 tab1 中的 slide1 而不是其他任何一个!有什么想法吗?
  • @BenjiBaird 是的,我愿意。问题是 jquery .eq(i),它在所有结果中选择 i。要获取每个滑块的i,请将代码更改为$('.links li:nth-child('+ ++i +') a.slick-slide').addClass('slick-current')
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多