JavaScript中的SVG转换

slu*_*ijs 8 javascript svg translation transformation transform

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

elem.transform.baseVal.getItem(0).setTranslate(x, y);
elem.transform.baseVal.getItem(0).setRotate(x, y);
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*son 22

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

var matrix = svgElement.createSVGMatrix();
Run Code Online (Sandbox Code Playgroud)

这是单位矩阵.

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

matrix = matrix.translate(10, 10);
Run Code Online (Sandbox Code Playgroud)

或直接......

matrix.a = 3;
Run Code Online (Sandbox Code Playgroud)

然后使用它

elem.transform.baseVal.getItem(0).setMatrix(matrix);
Run Code Online (Sandbox Code Playgroud)

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

transform="translate(1, 1) scale(2)"
Run Code Online (Sandbox Code Playgroud)

getItem(0)得到translate(1, 1)矩阵并getItem(1)得到scale(2)矩阵

如果你还没有在元素上设置变换,那么getItem(0)就会抛出.您可以检查使用的项目数量numberOfItems和/或添加初始项目,createSVGTransformFromMatrix以将矩阵转换为变换并appendItem附加变换.