4

我正在尝试在 nivo 滑块的两个循环之间创建延迟。

没有setTimeout一切工作正常(但没有延迟)。所以下面的例子有效:

$('#slider').nivoSlider({
        lastSlide: function(){ 
                $('#slider').data('nivo:vars').stop = true;
//              setTimeout(function() {
                        $('#slider').data('nivo:vars').stop = false;
//              }, 2000);
        },
});

如果我取消注释 setTimeout-lines,滑块会停止但不会重新开始?任何想法为什么?

更新:http: //jsfiddle.net/kgYNX/

第二次更新:也尝试了包装功能。该函数被调用,但如果我在新函数中使用 setTimeout 它将停止工作:http: //jsfiddle.net/kgYNX/1/

4

2 回答 2

1

解决它略有不同:

beforeChange: function(){ 
        $('#slider').data('nivo:vars').stop = true;
        var delay = 0;
        if ($('#slider').data('nivo:vars').currentSlide == $('#slider').data('nivo:vars').totalSlides - 2) {
                delay = 2000;
        }
        setTimeout(function() {
                $('#slider').data('nivo:vars').stop = false;
        }, delay);
}

我不知道为什么“totalSlides - 2”,但它有效:http: //jsfiddle.net/kgYNX/15/

于 2013-03-25T09:35:13.497 回答
0

作为一种变体,您可以向滑块变量集合添加自定义选项,以防止在超时重新启用滑块时停止在 lastSlide 处理程序上执行:

lastSlide: function () {
    var dontStop = $('#slider').data('nivo:vars').dontStopOnLast;
    if (!dontStop) {
        $('#slider').data("nivoslider").stop();
        setTimeout(function () {
            $('#slider').data("nivoslider").start();
        }, 2000);
    }
    $('#slider').data('nivo:vars').dontStopOnLast = !dontStop;
}
于 2013-03-25T09:53:26.187 回答