2010-08-03 94 views
4

我有一個幻燈片,它基本上改變了圖像的src屬性並將其淡入淡出。jQuery延遲:加速隊列?

function startSlideshow() { 
    if (i >= images.length) { i = 0 } 

    var path = images[i].path; 
    var name = images[i].name; 
    i++; 

    image.attr('src', path) 

    image.animate({opacity:1}, 1000) 
     .delay(5000) 
     .animate({opacity:0}, 500, startSlideshow); 
} 

這有效。

我也有一些我稱之爲圖像選擇器的東西。它看起來像這樣:

<ul id="ImagePicker"> 
    <li>•</li> 
    <li>•</li> 
    <li>•</li> 
</ul> 

當你點擊其中一個li項目幻燈片應該顯示相應的圖像。

$('#ImagePicker li').click(function() {  
    image.stop(true, false) 
     .animate({ opacity: 0 }, 10, startSlideshow); 
}); 

問題是,它有時會被竊聽,我不知道它爲什麼會發生。如果你在淡出期間點擊(我認爲).animate({opacity:0}, 500, startSlideshow)它開始加快。

有人知道爲什麼會發生這種情況嗎?

更新

實際上似乎它的延遲期間,而不是生命的過程中發生的事情。

更新2

我可以修復它喜歡這一點,但感覺有點哈克:

image.animate({ opacity: 1 }, 1000) 
    .animate({ opacity: 1 }, 5000) 
    .animate({opacity:0}, 1000, startSlideshow); 
+0

我也遇到過隊列停止的嚴重困難。不知何故,新的動畫無法從「停止」停止的地方開始。我能想到的唯一可靠的解決方案就是'.stop(true,true)',這很醜陋。我期待着閱讀答案! – MvanGeest 2010-08-03 13:35:27

+0

似乎我的問題可能與延遲有關。 http://api.jquery.com/delay/和http://dev.jquery.com/ticket/6576 – Pickels 2010-08-03 13:49:49

回答

1

的問題是相關的延遲()我這樣做解決了這個問題:

image.animate({ opacity: 1 }, 1000) 
    .animate({ opacity: 1 }, 5000) 
    .animate({opacity:0}, 1000, startSlideshow); 

我並不確定到底什麼是錯的延遲,但我在這裏找到了一些信息:

http://api.jquery.com/delay/
http://dev.jquery.com/ticket/6576

希望它有幫助。

0

我倒黴鏈接這樣的動畫。嘗試使用回調來對多個動畫進行排序,這樣他們就可以等待前一個完成。

而不是使用.delay,請嘗試使用setTimeout。

image.animate({opacity:1}, 1000, function(){ 
    setTimeout(image.animate({opacity:0}, 500, startSlideshow), 5000); 
}); 
+0

謝謝,爲答案,但鏈接回電並不真正漂亮。似乎我的問題與延遲方法有關。 – Pickels 2010-08-08 16:41:10