SVG中的平移、旋转和缩放在不同的参数条件下,体现出不同的效果:
1、如果直接用x、y指定了图形的坐标(在我的理解该坐标实际是图形相对坐标,如果没有通过transform属性设置坐标平移,该坐标是相对画布起始位置坐标,如果设置了坐标平移则为相对平移后坐标位置的偏移),所有的变形均受到x、y坐标值影响;如下代码示例:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="800">
<g transform="translate(100,100)scale(0.8,0.8)">
<rect width="100" height="50" fill="blue"></rect>
</g>
<rect x="50" y="50" transform="translate(200,200)scale(1.2,1.2)" width="200" height="50" fill="red" />
</svg>
缩放倍数为1.2和1时实际看到的效果:受缩放的影响,矩形不仅长、宽跟随缩放系数变化,图形位置也跟随缩放系数变化,说明缩放系数要影响参数 x、y;相应的使用rotate参数时,也会受到x、y系数的影响。
建议:为保证图形变换效果,不要设置图形起始值,通过transform属性的translate参数设置图形相对坐标原点的平移位置即可;
2、旋转 :如果采用transform属性设置了translate参数,则旋转中心为translate设置位置,示例如下:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="800">
<g transform="translate(100,100)rotate(90)">
<text fill="red">hello</text>
</g>
</svg>
当设置不同的旋转角度时,始终以坐标位置100,100为中心进行旋转,其中旋转按照rotate(angle,[x,y])格式设置参数,angle表示旋转的目标角度(不表示旋转角度哈,如:-90表示逆时针从0度位置逆时针方向选装90度,不是当前位置逆时针旋转90度),[x,y]表示旋转中心的相对坐标;如下示例代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="800">
<g transform="translate(200,200)rotate(90)">
<rect width="200" height="100" fill="red" ></rect>
</g>
</svg>
该示例代码的旋转中心为200,200,90度旋转完成后,矩形左上角坐标为(100,200),右上角坐标位置为(200,200)
如果设置translate(x1,y1)参数又设置了rotate的旋转中心参数,则实际的旋转中心为x1+x,y1+y,以下示例以矩形中心为中心点旋转的代码示例:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="800">
<g transform="translate(200,200)rotate(90,100 50)">
<rect width="200" height="100" fill="red" ></rect>
</g>
</svg>
旋转中心位置为:300,250