ラファエルと一緒に過ごしたことのある人なら誰でも、そのパス アニメーションがひどく不十分であることに気付く機会があると思います。ここ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 フレンドリーです。
こことここで私のアプリケーションのいくつかを参照してください。