setTimeout中的匿名函数无法正常工作

时间:2013-03-25 08:57:12

标签: javascript jquery

我正在尝试在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/

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

作为变体,您可以向slider vars集合添加自定义选项,以防止在超时重新启用滑块时在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;
}