SVG要素のグループを移動するための最良の方法(より速く、よりきれいに...)を探しています。私は3つの方法を念頭に置いています:
- すべての要素に対してループを実行し、それぞれについて x 属性と y 属性を変更します
- すべての要素を svg 要素にグループ化し、その x 属性と y 属性を変更する
- ag 要素のすべての要素をグループ化し、ここで説明されている方法を適用します: https://stackoverflow.com/a/14036803/2019761
アイデアはありますか?
SVG要素のグループを移動するための最良の方法(より速く、よりきれいに...)を探しています。私は3つの方法を念頭に置いています:
アイデアはありますか?
javascriptでsvgグループまたは要素を移動できます
// translate svg element
function translate( _element , _x , _y )
{
var transform = _element.transform.baseVal.getItem(0);
var mat = transform.matrix;
mat = mat.translate( _x, _y );
transform.setMatrix( mat );
}
実際に見てみましょう:
DOM メソッドとのやり取りには、JS <-> ネイティブ コードのオーバーヘッドが伴います。ブラウザーの実装者は、このオーバーヘッドを削減するために懸命に取り組んできましたが、無料になることはありません。多くの要素に x と y を設定するなど、多くのことを行っている場合は、パフォーマンスに大きな影響を与える可能性があります。この場合、<svg>
または<g>
コンテナで位置プロパティを 1 回だけ設定すると役立つ可能性があります。
オーバーヘッドのより重要な原因は、行った変更のために再描画する作業である可能性があります。これらの変更がトランスフォームの変更であり、トランスフォームの値が短時間に複数回変更される場合、ほとんどの実装では、変換された SVG 要素のコンテンツをキャッシュされたオフスクリーン サーフェスにペイントし、毎回再ペイントする代わりにそのサーフェスを合成します。 . 要素のコンテンツの描画にコストがかかる場合 (たとえば、要素に多くの子が含まれている場合や、高価なフィルター効果がある場合)、再合成は再描画よりもはるかに高速になる可能性があるため、a の変換をアニメーション化する場合は、<g>
はるかに見やすくなります。パフォーマンス。