我正在使用Slick Slider来显示一些幻灯片.我需要能够在幻灯片之间有不同的延迟.
这是我到目前为止 - 它适用于第一张幻灯片,但它被卡在第二张幻灯片上.这个错误对我来说没那么有用:"Uncaught TypeError:无法读取属性'add'of null" - slick.min.js:17.
代码:
var $slideshow = $('.slider');
var ImagePauses = [6000, 2000, 3000, 10000, 4000];
// Init
modifyDelay(0);
// Sliding settings
$slideshow.on('afterChange', function(event, slick, currentSlide) {
modifyDelay(currentSlide);
});
// Slider config
function modifyDelay(startSlide) {
$slideshow.slick({
initialSlide: startSlide,
autoplay: true,
autoplaySpeed: ImagePauses[startSlide],
fade: true
});
}
Run Code Online (Sandbox Code Playgroud)
有什么想法有什么不对?
你实际上正在创建一个新的SlickJS实例afterChange- 这可能不是你想要的.您需要的只是在每次幻灯片更改后更新光滑选项,以便更改自动播放速度.
SlickJS 公开了一个名为的方法slickSetOptions,允许您随时修改设置.
你可以做的是modifyDelay()完全抛弃这个功能.相反,当afterChange事件被触发时,您可以使用.slick('slickSetOptions', 'autoplaySpeed', <yourSpeed>', true)设置新的自动播放速度:
$slideshow.on('afterChange', function(event, slick, currentSlide) {
$slideshow.slick('slickSetOption', 'autoplaySpeed', ImagePauses[currentSlide], true);
});
Run Code Online (Sandbox Code Playgroud)
请注意,位置参数slickSetOption如下:
ImagePauses根据索引从数组中提取值false将是一个安全的赌注,但我用true在我的例子,以面向未来的您的设置.这是一个概念验证示例,我已添加,console.log()以便您知道每个afterChange事件触发后设置的值:
$(function() {
var $slideshow = $('.slider');
var ImagePauses = [6000, 2000, 3000, 10000, 4000];
// Init
$slideshow.slick({
initialSlide: 0,
autoplay: true,
autoplaySpeed: ImagePauses[0],
dots: false,
fade: true
});
// Sliding settings
$slideshow.on('afterChange', function(event, slick, currentSlide) {
// Console log, can be removed
console.log('Current slide: ' + currentSlide + '. Setting speed to: ' + ImagePauses[currentSlide]);
// Update autoplay speed according to slide index
$slideshow.slick('slickSetOption', 'autoplaySpeed', ImagePauses[currentSlide], true);
});
});Run Code Online (Sandbox Code Playgroud)
.panel {
border: 10px solid #333;
background: #ccc;
height: 200px;
margin: 10px;
font-size: 72px;
text-align: center;
line-height: 200px;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
<div class="slider">
<div class="panel">1</div>
<div class="panel">2</div>
<div class="panel">3</div>
<div class="panel">4</div>
<div class="panel">5</div>
</div>Run Code Online (Sandbox Code Playgroud)
您还可以检查出你修改的提琴,现在工程:) http://jsfiddle.net/teddyrised/vxxhnga5/7/