SVG Transformations en JavaScript

Les transformations SVG peuvent être effectuées via JavaScript en configurant leurs attributs correspondants setAttribute("transform", "translate(x,y)") mais devrait également être possible via JavaScript pur .

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

Ces deux devraient fonctionner pour la traduction et la rotation, mais qu'en est-il de l'inclinaison, de la mise à l'échelle et de la matrice? elem.transform.baseVal.getItem(0).setMatrix() existe, mais autant que je peux le dire, cela exclut aucun params et SVGCreateMatrix() n'accepte aucun params non plus. Comment suis-je censé le faire, et comme question bonus: qu'est-ce que getItem(0) fait réellement?

Chaque élément <svg> a une méthode createSVGMatrix dom.

 var matrix = svgElement.createSVGMatrix(); 

C'est la matrice d'identité.

Vous pouvez alors manipuler ceci …

 matrix = matrix.translate(10, 10); 

Ou directement …

 matrix.a = 3; 

Et ensuite l'utiliser

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

GetItem (0) obtient le premier élément dans un attribut de transformation, par exemple

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

getItem(0) obtient la matrice de translate(1, 1) et getItem(1) obtient la matrice de l' scale(2)

Si vous n'avez pas configuré une transformation sur un élément, alors getItem(0) lancera. Vous pouvez vérifier combien d'éléments utilisent numberOfItems et / ou ajouter un élément initial à l'aide de createSVGTransformFromMatrix pour transformer votre matrice en transformée et appendItem pour ajouter la transformation.