12

SVG 转换可以通过 JavaScript 通过设置它们的相应属性来完成,setAttribute("transform", "translate(x,y)")但也应该可以通过JavaScript 来实现。

elem.transform.baseVal.getItem(0).setTranslate(x, y);
elem.transform.baseVal.getItem(0).setRotate(x, y);

这两个应该适用于平移和旋转,但是倾斜、缩放和矩阵呢?elem.transform.baseVal.getItem(0).setMatrix()存在,但据我所知,它不排除任何参数,SVGCreateMatrix()也不接受任何参数。我应该怎么做,作为一个额外的问题:getItem(0)实际上做了什么?

4

1 回答 1

29

每个<svg>元素都有一个createSVGMatrix dom 方法。

var matrix = svgElement.createSVGMatrix();

这是单位矩阵。

然后你可以操纵这个......

matrix = matrix.translate(10, 10);

或者直接...

matrix.a = 3;

然后使用它

elem.transform.baseVal.getItem(0).setMatrix(matrix);

getItem(0)获取变换属性中的第一个元素,例如

transform="translate(1, 1) scale(2)"

getItem(0)获取translate(1, 1)矩阵并getItem(1)获取scale(2)矩阵

如果您没有在元素上设置转换,那么getItem(0)将抛出。您可以检查有多少项目正在使用numberOfItems和/或添加初始项目,createSVGTransformFromMatrix用于将矩阵转换为转换并appendItem附加转换。

于 2013-05-29T10:32:05.817 回答