2013-03-25 36 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; 
} 
相關問題