光滑轮播 - 按外部顺序禁用控件和交互

时间:2016-10-26 21:35:06

标签: javascript jquery slick.js

我正在学习JavaScript,而且我遇到了一个简单的问题,我不知道如何处理它。

我想要实现的目标是“保持”#39;或者'冻结'通过仅在用户需要时单击button来禁用所有可能的导航(键盘箭头,单击和拖动,触摸交互)的幻灯片。通过单击此button,用户可以使用滑块启用或禁用导航控件。

因此,点击此button后,用户无法在幻灯片上导航。用户必须再次点击button以启用控件。

这是我到目前为止所得到的:



jQuery(document).ready(function($) {
  $('.slider').slick({
    infinite: true,
    fade: false,
    centerMode: true,
    variableWidth: true,
    slidesToShow: 3,
    slidesToScroll: 1,
    arrows: false,
    autoplay: false
  });
});

  var hold = false;

  $('#hold').click(function() {
      $(this).attr("class", "active disabled");

      if (hold == false) {
          $('.slider').slick({
            accesibility: false,
            draggable: false,
            swipe: false,
            touchMove: false
          });
          hold = true;

      } else {
        $('.slider').slick({
            accesibility: true,
            draggable: true,
            swipe: true,
            touchMove: true
          });
        hold = false;
        $("#hold").attr("class", "disabled");
      }

  });

.card {
  margin: 10px;
  padding: 50px 100px;
  background-color: silver;
  color: white;
}

.active {
  color: red;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src='//cdn.jsdelivr.net/jquery.slick/1.5.7/slick.min.js' type='text/javascript'></script>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.9/slick.css" />

<div class="slider">
  <h1 class="card">1</h1>
  <h1 class="card">2</h1>
  <h1 class="card">3</h1>
  <h1 class="card">4</h1>
  <h1 class="card">5</h1>
</div>

<button id="hold" class="disabled">HOLD</button>
&#13;
&#13;
&#13;

我能错过什么?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

slickSetOption用于set an individual value live。请参阅http://kenwheeler.github.io/slick/

上的Methods部分

以下是一个工作示例。

var slider = $("#slider");
slider.slick({
  arrows: false,
  centerMode: true,
  infinite: true,
  slidesToShow: 3,
  slidesToScroll: 1,
  variableWidth: true
});

var hold = false;
$("#hold").click(function() {
  slider.slick("slickSetOption", "accessibility", hold);
  slider.slick("slickSetOption", "draggable", hold);
  slider.slick("slickSetOption", "swipe", hold);
  slider.slick("slickSetOption", "touchMove", hold);
  
  hold = !hold;
  
  $(this).toggleClass("disabled");
});
h1 {
  background-color: silver;
  color: white;
  margin: 10px;
  padding: 50px 100px;
}

.disabled {
  color: red;
}
<link href="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
<div id="slider">
  <h1>1</h1>
  <h1>2</h1>
  <h1>3</h1>
  <h1>4</h1>
  <h1>5</h1>
</div>
<button id="hold">HOLD</button>