我有以下代碼沿其路徑動畫一個對象(「標記」),這是一個座標數組(x,y,t,其中t是時間在這個座標和下一個座標之間,以ms爲單位 - 來說明物體的加速度/減速度,路徑是由用戶的鼠標移動產生的,並且高精度是理想的)。該項目使用d3.js動畫SVG。d3/Javascript動畫不在播放時它們應該是
function Animation(tag,path) {
this.tag = tag;
this.path = path;
}
Animation.prototype = {
start : function() {
console.log('Animation created');
var i = 0;
var nextTime = this.path[0].t;
var thisClass = this;
setTimeout(function(){}, nextTime);
console.log('Beginning animation');
function step() {
setTimeout(function(){
if(i == thisClass.path.length -1) {
var now = new Date();
console.log('Animation for '+ thisClass.tag.attr('id') + ' played at ' + (now - globalTimer) + 'ms.');
return;
}
if(i === 0) {
var now = new Date();
console.log('Animation for '+ thisClass.tag.attr('id') + ' started at ' + (now - globalTimer) + 'ms.');
}
thisClass.tag
.attr('cx', thisClass.path[i].x)
.attr('cy', thisClass.path[i].y);
i++;
requestAnimationFrame(step);
}, thisClass.path.t);
}
requestAnimationFrame(step);
}
};
另一個類負責調度每個動畫應該播放的時間。例如,在30秒的時間內,必須播放3個動畫,時間爲:03,:09,:25。當需要的動畫播放,調度稱之爲:
new Animation(Tag, Path).start();
問題:雖然調度器調用每個動畫正確的時間,沒有任何功能step()
的實例在運行時 - 他們都似乎發生在記錄的最後階段,一次。因此,當人們希望我的日誌看起來是這樣的:
動畫創建
開始動畫
播放的動畫
動畫創建
開始動畫
播放的動畫
...
...相反,它看起來像這樣:
動畫創建
開始動畫
動畫創建
開始動畫
(2)
播放的動畫
(編輯:http://puu.sh/4Ucw9.png瞭解更多詳情。 「動畫推送」在new Animation(...)
之後立即出現,因此理論上在動畫完成後。正如你所看到的,三個標籤(c0,c1,c2)應該被稱爲不同的ms標記,但所有三個標籤的動畫開始於7019ms)
動畫應該在被調用時播放,而不是在時間段結束。看起來他們正在排隊,然後全部執行,但據我所知,我沒有告訴他們這樣做。我懷疑在某種程度上是關鍵,但我昨天才開始使用它,所以我仍然不能100%確定它的功能以及如何使用它。有誰知道發生了什麼事?
是否有使用原始動畫幀的特殊原因?你可以用D3的轉換完成所有這些。 –
我不是100%確定我會繼續使用原始動畫幀,但到目前爲止,它們是最容易管理和實施的。他們有點混亂,是的,但我寧願讓原型的基礎知識首先工作,然後讓代碼更好,更快,更漂亮。 –
我的意思是,在轉換過程中這會更容易。 –