【问题标题】:How do I get the index of an element clicked using a plugin method?如何获取使用插件方法单击的元素的索引?
【发布时间】:2018-06-28 11:57:59
【问题描述】:

我正在使用 Slick JS 滑块,并试图获取单击的幻灯片的索引。所有属性都可以通过一个名为'getSlick'的方法提供给我

每当单击幻灯片时,以下代码都会记录所有索引。我只想点击幻灯片的索引。我究竟做错了什么?

  $('.sy-images-slides-primary .slick-slide').click(function(){
    console.log($(".sy-images-slides-primary").slick("getSlick").$slides);
  });

// // define inner slider
$('.slider').slick({
  dots: false,
  infinite: true,
  slidesToShow: 5,
  slidesToScroll: 5,
  centerMode: true,
  centerPadding: 110,
  focusOnSelect: true,
  variableWidth: true
});

  $('.slider .slick-slide').click(function () {
    $(".slider").slick("getSlick").$slides.each(function (index, slide) {
      console.log(index);
    });
  });
.slick-slide {
    padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" rel="stylesheet" />
<script src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>

<div class="slider">
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
<div><img src="http://placehold.it/50x50"></div>
</div>

【问题讨论】:

    标签: javascript jquery methods slick.js


    【解决方案1】:

    如果您希望在单击幻灯片后立即使用插件事件“afterChange”,而不是像您一样使用额外的单击侦听器。

    $('.your-element').on('afterChange', function(event, slick, currentSlide){
       //
    });
    

    currentSlide 是最后一个滑动元素的索引。

    如果您需要一个监听器来点击幻灯片本身,您可以从数据属性中读出位置(您必须标准化这个值,因为还有一个 -1,但这应该很容易工作)。

    您更改的代码:

    // // define inner slider
    $('.slider').slick({
      dots: false,
      infinite: true,
      slidesToShow: 5,
      slidesToScroll: 5,
      centerMode: true,
      centerPadding: 110,
      focusOnSelect: true,
      variableWidth: true
    });
    
    $('.slider').on('afterChange', function (event, slick, currentSlide) {
      console.log('afterChange, currentSlide: ', currentSlide);
    });
    $('.slick-slide').on('click', function(ev){
      console.log('onClick slick-index:', $(ev.currentTarget).data('slick-index'));
    });
    .slick-slide {
        padding: 10px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" rel="stylesheet" />
    <script src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
    
    <div class="slider">
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    <div><img src="http://placehold.it/50x50"></div>
    </div>

    【讨论】:

    • 那行不通。如果可以,您可以复制我上面的代码并以这种方式解决吗?
    • 我刚刚编辑了我的答案...请使用 slick 的回调或事件来获取事件,而不是额外的“点击”侦听器
    • 当我把上面的代码放在 afterChange 事件中时,它给了我一个错误:$(...).slick.$slides is not a function
    • 查看我的实现示例代码,我更新了答案,这有帮助吗?
    • 感谢帮助!你知道是否有办法使用 onclick 来处理我的版本?
    猜你喜欢
    • 2023-03-18
    • 2021-04-15
    • 2017-02-08
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多