【问题标题】:SVG animation rotate a path around a center point.SVG 动画围绕中心点旋转路径。
【发布时间】:2018-01-17 07:50:07
【问题描述】:

我目前无法让这个 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/

【问题讨论】:

    标签: svg svg-animate


    【解决方案1】:

    我将做一个有根据的猜测并说这是因为您使用了形状的中心而不是形状的圆形部分的中心。如果是这种情况,那么箭头将导致偏移中心。

    据我估计,中心大约在 (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>

    【讨论】:

    • 你是怎么算出 8.4 / 9.5 的值的?
    • 反复试验。我在 SVG 上添加了一个圆圈并移动它直到它居中。 jsfiddle.net/vfz5t0vw/1
    • 计算值:取动画路径的大小并将其除以 2。至少我是这样计算的。
    • @maysi 这在某些情况下会起作用。但并非全部 - 例如这个。
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2018-07-01
    • 2017-05-04
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多