我需要解決這個問題,但不想依賴setTimeout(當瀏覽器被最小化時,定時器可能會表現異常,並且通常看起來不正確地使用Raphael)。
因此,受trampolines的啓發,我製作了一個動畫隊列。
一般策略是將匿名函數推入隊列中,要求在函數的某個地方,animations.next
要麼直接調用,要麼給動畫來觸發。
animations = function() {
var animationQueue = []
, obj = {}
obj.push = function(fn) {
animationQueue.push(fn)
}
obj.next = function() {
if (animationQueue.length !== 0) {
animationQueue.shift().call()
}
}
return obj
}()
然後,你可以做這樣的事情了幾聲:
animations.push(function() {
paper.circle(x, y, 2)
.attr('fill', '#fff')
.animate({r: radius}, animationSpeed, animations.next)
})
最後,在不管它是你正在做到底,叫animations.next()
啓動鏈。
感謝oli。我會看看這個,看看它是否有意義 – Alex 2011-12-27 18:28:05
我還不確定你是如何做到這一點的,但它確實有效。謝謝! – Alex 2011-12-27 18:46:11
@亞歷克斯很高興它幫助 - 如果您認爲需要一些闡述,請讓我知道,我可以更新答案。 – oli 2011-12-28 02:14:41