2013-03-25 76 views
4

我试图在nivo-slider的两个循环之间创建一个延迟。setTimeout中的匿名函数不起作用

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

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

如果我取消注释setTimeout线的滑块停止,但不会再次启动?任何想法为什么?

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

月2日更新: 具有包装功能部件试了一下,太。该函数被调用,但如果我在新的函数中使用的setTimeout停止工作:http://jsfiddle.net/kgYNX/1/

+3

你可以在http://jsfiddle.net/上做一个工作示例吗? – Natrium 2013-03-25 08:59:24

+1

相关:'setTimeout'代码很好,问题在于别处。不相关:你分配给'lastSlide'的函数结尾处的逗号逗号会使IE8和更早的版本搞砸。 – 2013-03-25 09:01:23

+0

我认为它可能对你有用http://stackoverflow.com/questions/13315904/jquery-nivo-slider-set-delay-time-for-each-slide – IJMorgado 2013-03-25 09:04:48

回答

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/

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; 
}