0

我已经围绕 RaphaelElement 编写了一个包装类。它有一个属性 elem 来存储相应的 Element 和两个方便的方法 setPos 和 getPos。此外,还有一个位置成员,其中包含两个条目 x 和 y。

因此 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 的位置,并找到了方法 transform。但是有一个问题:我还没有找到一种方法来给“绝对”的新坐标进行变换。它只提供平移、旋转或缩放的方法。如果我必须通过将当前位置的翻译应用到新位置来更改位置,那么我必须将新的翻译附加到转换字符串中。我担心它可能会长得很长。此外,我必须评估一个越来越长的字符串才能获得我当前的位置。

当然可以通过将新翻译附加到转换来移动我的元素,但我希望能够直接设置新位置或“应用”或“完成”转换,这样它的字符串就不会无限增长.

4

1 回答 1

2

TransformList上的 consolidate 方法将转换列表转换为单个矩阵。添加翻译后,您可以调用它。

或者,您可以在 transformList 上调用 getItem ,这将为您提供一个 SVGTransform 对象,您可以在将直接设置新位置的对象上调用 setTranslate 。你需要小心有一个转换,如果没有,就创建一个。

于 2013-01-02T17:54:21.560 回答