SVG动画:如何围绕中心点旋转路径?

13

我目前遇到了一个问题,无法让这个SVG图像完美地绕着它的轴旋转,因为它是一条路径。我尝试计算了我认为应该是中心点。有没有人能指导我,为什么它不能绕重心完美地旋转?或者在将来如何最好地计算它?

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 17 17" >
<style type="text/css">
    .st0{fill:#000000;}
</style>
    <path id="arrow" class="st0" d="M9.3,16.4c3.2-0.4,5.8-2.9,6.2-6.1c0.5-4.2-2.8-7.7-6.9-7.8V0.6c0-0.1-0.1-0.2-0.2-0.1l-4,2.9
    c-0.1,0-0.1,0.1,0,0.2l3.9,2.8c0.1,0.1,0.2,0,0.2-0.1V4.5c2.9,0,5.2,2.5,5,5.4c-0.2,2.5-2.2,4.5-4.8,4.7c-2.7,0.2-5-1.7-5.4-4.2
    c-0.1-0.5-0.5-0.8-1-0.8c-0.6,0-1,0.5-1,1.1C2.1,14.2,5.4,16.9,9.3,16.4L9.3,16.4z"/>

    <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="360 8.425116062164307 8.459185183048248" to="0 8.425116062164307 8.459185183048248" dur="0.5s" additive="sum" repeatCount="indefinite" />
</svg>

https://jsfiddle.net/vfz5t0vw/

1个回答

25
我会做一个有根据的猜测,并认为问题出在您使用了形状的中心而不是形状圆形部分的中心。如果是这样的话,箭头将导致偏移中心。
据我推算,中心大约在(8.4, 9.5)。
另外,如果只旋转路径而不是整个SVG,您将获得更好的结果。
任何剩余的晃动都是因为箭头路径似乎不是完美的圆形。

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 17 17" >
  <style type="text/css">
   .st0{fill:#000000;}
  </style>
  <path id="arrow" class="st0" d="M9.3,16.4c3.2-0.4,5.8-2.9,6.2-6.1c0.5-4.2-2.8-7.7-6.9-7.8V0.6c0-0.1-0.1-0.2-0.2-0.1l-4,2.9
     c-0.1,0-0.1,0.1,0,0.2l3.9,2.8c0.1,0.1,0.2,0,0.2-0.1V4.5c2.9,0,5.2,2.5,5,5.4c-0.2,2.5-2.2,4.5-4.8,4.7c-2.7,0.2-5-1.7-5.4-4.2
     c-0.1-0.5-0.5-0.8-1-0.8c-0.6,0-1,0.5-1,1.1C2.1,14.2,5.4,16.9,9.3,16.4L9.3,16.4z">
     
    <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="360 8.4 9.5" to="0 8.4 9.5" dur="0.5s" additive="sum" repeatCount="indefinite" />
  </path>
</svg>


5
你是如何确定8.4/9.5的数值的? - Squiggs.
1
试错。我向SVG添加了一个圆并将其移动,直到它居中。https://jsfiddle.net/vfz5t0vw/1/ - Paul LeBeau
要计算出值:取动画路径的大小并除以2。至少这就是我找到答案的方法。 - maysi
1
@maysi 这在某些情况下是可行的。但并非所有情况都适用 - 例如这个案例。 - Paul LeBeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接