请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
svg基础变形: transform 之 rotate
svg变形中的旋转 rotate,和CSS原理一致,但是表达方式大不相同。svg的transform属性中,rotate需要两个参数,角度和基点坐标,表示为 transform="rotate(deg, x y)",其中,deg是角度,x和y分别是旋转的XY坐标值,例如,rotate(45, 100 100) 表示,旋转45度,旋转基点为基于svg画布的坐标点{100,100}。CSS中,旋转基点另外使用 transform-origin 设定。
旋转基点通常总是根据需要设定,我们做帖的系列音频播放器中,很多用旋转的东东做按钮,需要将旋转基点设为按钮的中心,我们就以旋转对象的中心为基点,设计下例代码:橄榄色矩形、海军蓝矩形和红色矩形的位置、宽高一模一样,橄榄色矩形以自身中心为基点旋转四十五度,红色矩形也旋转四十五度但不设置旋转基点(默认值0 0):
<svg width="200" height="160" style="border: 1px solid gray;">
<rect x="15" y="15" width="70" height="70" fill="olive" />
<rect x="15" y="15" width="70" height="70" transform="rotate(45,50 50)" fill="navy" />
</svg>
下面是效果,可以看出,红色矩形旋转后移位了,原因是它绕着基于svg画布的 0 0 即左上角坐标点旋转。
可以勾选上面的复选框,尝试将红色矩形的旋转基点设为矩形的中心,看看发生什么;取消勾选按钮,则恢复初始旋转基点{0,0}。
【附】rotate 基点缺失时如何让元素旋转后停在原位
下面是代码和效果(圆点即circle元素作参照用):
<svg width="200" height="200" style="border: 1px solid gray;">
<rect
x="20"
y="20"
width="80"
height="80"
transform="translate(60 60) rotate(45) translate(-60 -60)"
fill="olive"
/>
<circle cx="60" cy="60" r="4" fill="red" />
</svg>
红色文本代码是关键所在:矩形的圆心在svg画布的 {60,60} 处,我们先用 translate(60 60) 将矩形位移,旋转之后,再用 translate(-60 -60) 反方向回来。实现原理和我们许久以前介绍过的此类CSS的妙法一样。
最后小结一下:svg的transform属性,rotate旋转默认以画布的{0,0}即左上角为旋转基点,若需要设置旋转基点,使用 (角度, x坐标 y坐标) 的方式进行,xy坐标参照svg画布坐标体系。当需要设置元素自身的中心为旋转基点时,所取的xy坐标值是元素中心相对于svg画布的坐标值。
|