我相信每个与 Raphael 共度时光的人都有机会发现它的路径动画严重不足。我在 SO 上看到了一些很好的解决方法(这是最全面的)。最重要的是,没有开箱即用的好解决方案。
我通常使用这个实用功能(很容易转换为 Raphael 插件,如果您发现这样的打包更方便):
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 友好。
在此处和此处查看我的一些应用程序。