我相信每個與拉斐爾一起度過的人都有機會找到它的路徑動畫可悲的不足。我在這裏看到了一些很好的解決方案(this是最全面的)。底線,沒有很好的解決方案。
我通常使用這種效用函數(輕鬆轉換爲拉斐爾插件,如果你找到了這樣的包裝更方便):
function drawpath(canvas, pathstr, duration, attr, callback)
{
var guide_path = canvas.path(pathstr).attr({ stroke: "none", fill: "none" });
var path = canvas.path(guide_path.getSubpath(0, 1)).attr(attr);
var total_length = guide_path.getTotalLength(guide_path);
var last_point = guide_path.getPointAtLength(0);
var start_time = new Date().getTime();
var interval_length = 50;
var result = path;
var interval_id = setInterval(function()
{
var elapsed_time = new Date().getTime() - start_time;
var this_length = elapsed_time/duration * total_length;
var subpathstr = guide_path.getSubpath(0, this_length);
attr.path = subpathstr;
path.animate(attr, interval_length);
if (elapsed_time >= duration)
{
clearInterval(interval_id);
if (callback != undefined) callback();
guide_path.remove();
}
}, interval_length);
return result;
}
您可以使用此逐步「繪製」一條線幾乎是無限的複雜性。 Firefox仍然不夠快,無法實時計算複雜路徑,但Chrome非常棒,而且它仍然是VML友好的。
查看我的一些應用程序here和here。
從未使用拉斐爾,但有一個快速瀏覽文檔,它似乎拉斐爾有更多的CSS風格的動畫,您定義的動畫,然後開始/停止它的東西。你需要更多的框架第二種東西。也許你應該只是看看更多的js做事的方式,這篇文章可能會幫助你.... https://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/ – PAEz