2010-08-03 95 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