javascript - 拉斐尔累积与绝对缩放/旋转/平移?

标签 javascript svg raphael vml

我正在尝试用 Javascript 绘制交互式 map ,使用 Raphael 来完成繁重的工作。

map 背景是一个相当复杂的东西,包含网格、 map 元素、标签等。在此之上,我将绘制用户实际使用的东西。因为背景很复杂,我不想每一帧都重新渲染它。因此,在绘制之后我想重用那些绘图元素,只是在用户平移、缩放等时更改背景的平移、旋转、缩放等。

不幸的是,我对 Raphael 的转换原语相当困惑:它们的行为并不像我期望的那样。如果我调用 scale(),缩放似乎适用于绘图元素的原始大小;但是 translate() 是累积的,所以它适用于之前的翻译。 rotate() 可以是其中之一,因为它有一个我可以设置的选项...

是否可以进行绝对翻译?也就是说,能够指定我的对象(通常是路径)新中心的绝对坐标?如果做不到这一点,是否跟踪旧位置以便在我想将其移动到新位置时应用增量是一种合理的方法吗?

或者我是否最好在每一帧都重新渲染整个事物? (我看到 Raphael 不擅长复杂绘图转换的建议,因为其中大部分是用 Javascript 完成的;查看正在生成的 SVG,我看到转换似乎正在返回到路径数据中,这将忍受这个……)

(顺便说一句,FWIW 我正在使用 GWT Raphael 界面来处理所有这些。)

最佳答案

您可以使用 Element.attr设置绝对位置。只需更改 x 和 y 属性:

myElement.attr("x", myX);
myElement.attr("y", myY);

关于javascript - 拉斐尔累积与绝对缩放/旋转/平移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200675/

相关文章:

javascript - 如何在复选框打勾时将在一个文本框中输入的数据显示到另一个文本框?

javascript - "Apply"RaphaelJs 中的转换

html - 带有图像的 CSS 形状 mask

javascript - SVG 到 Canvas 与 canvg 不尊重 css

javascript - WheelNav 不适用于 CodePen,但在代码片段中

Javascript 打印在 IE9 中不工作

javascript - asp.net 允许在 Gridview 内的行中一次仅选择一个复选框

javascript - 您可以使用 javascript 来渲染图像流吗?

javascript - 使用 Selenium 获取 DOM 中(而不是 HTML)中的 (d3) 元素的属性

javascript - 如何添加点击并拖动以缩放 SVG 中的图像?