0

RaphaelElementのラッパークラスを作成しました。これには、対応するElementと2つの便利なメソッドsetPosおよびgetPosを格納するプロパティelemがあります。さらに、xとyの2つのエントリを持つポジションメンバーがあります。

したがって、getPos()は単に位置を返します。setPosはパラメータとして新しい位置を受け入れ、elemの座標を更新する必要があります。

残念ながら、どのタイプのRaphaelElementがelemに格納されるかについての情報はありません。それは、長方形だけでなく円でもかまいません。現在、setPos内のコードは次のようになっています。

//position is the parameter, this.pos is the member
this.pos = position;
this.elem.attr("x",this.pos.x);
this.elem.attr("y",this.pos.y);
this.elem.attr("cx", this.pos.x);
this.elem.attr("cy", this.pos.y);

これは汚い回避策のように感じます。円と長方形の両方で機能しますが、長方形には属性「cx」または「cy」がなく、円には「x」と「y」の両方が存在しません。

RaphaelElementの位置を変更するためのより良い方法についてドキュメントを参照し、メソッド変換を見つけました。しかし、問題があります。変換するための「絶対的な」新しい座標を与える方法が見つかりませんでした。平行移動、回転、または拡大縮小する手段のみを提供します。現在の位置から新しい位置に翻訳を適用して位置を変更する必要がある場合は、変換文字列に新しい翻訳を追加する必要があります。私はそれが非常に長くなるかもしれないことを恐れています。さらに、現在の位置を取得するには、ますます長くなる文字列を評価する必要があります。

変換に新しい翻訳を追加することで要素を移動することは確かに可能ですが、文字列が無限に大きくならないように、新しい位置を直接設定するか、変換を「適用」または「終了」できるようにしたいと思います。 。

4

1 に答える 1

2

TransformListのconsolidateメソッドは、変換のリストを単一の行列に変換します。翻訳を追加した後、これを呼び出すことができます。

または、SVGTransformオブジェクトを提供するtransformListでgetItemを呼び出し、新しい位置を直接設定するオブジェクトでsetTranslateを呼び出すこともできます。変換があることに注意し、ない場合は変換を作成する必要があります。

于 2013-01-02T17:54:21.560 に答える