SVGTransform内に用意されているmatrixの値を直接操作することで、SVGにもととも用意されている
rotate()、translate()、scale()などの命令と同等の処理を行います。
注意:何か処理をしたあと、ほかのボタンを押すと、意図した動作にならないときがあります。
(matrixに前の計算につかった値が残っている模様)
既存の命令で対応できる場合は無理にmatrixをいじらないほうが手っ取り早くてお勧めかもしれません。
なお、console.log()にてSVGTransformなどを出力しているので興味のあるかたはブラウザの開発ツールなどでごらんください。
↓以下が実際のソースサンプルです。
▼JavaScript
<script> // svgの要素を取得 var SVG_1 = document.getElementById("box_1"); console.log(SVG_1); // svgにSVGTransformを生成する var Transform = SVG_1.createSVGTransform(); console.log(Transform); // 生成されたTransform内のmatrixオブジェクトをMatrixに参照 var Matrix = Transform.matrix; console.log(Matrix); // 今回は特に使わないですがx,y,height,widthが取得できるgetBBoxをメモ console.log(SVG_1.getBBox()); var Group_1 = document.getElementById("g_1"); var box1=( SVG_1.getBBox()); function M_rotate(deg){ Group_1.transform.baseVal.appendItem(Transform); var rad=deg/180*Math.PI; cos_r=Math.cos(rad); sin_r=Math.sin(rad); Matrix.a=cos_r; Matrix.c=-sin_r; Matrix.e=0; Matrix.b=sin_r; Matrix.d=cos_r; Matrix.f=0; console.log(Transform); } function M_translate(x,y){ Group_1.transform.baseVal.appendItem(Transform); Matrix.a=1; Matrix.c=0; Matrix.e=x; Matrix.b=0; Matrix.d=1; Matrix.f=y; } function M_scale_origin(x,y){ Group_1.transform.baseVal.appendItem(Transform); Matrix.a=x; Matrix.c=0; Matrix.e=0; Matrix.b=0; Matrix.d=y; Matrix.f=0; } </script>
▼CSS
▼HTML