2014-03-01 25 views
2

我正在寻找动画SVG stroke-dasharray的单个破折号的旋转,有谁知道如何,因为它是可能的吗?SVG stroke-dasharray的旋转破折号

我意识到我可以用CSS'transform:rotate()旋转SVG元素的整个对象,但是有什么办法可以旋转单独的破折号吗?我也意识到我可以重新创建所有使用单个元素并旋转它们,但这并不是我想要做的,因为性能和简洁的原因

Here's a demo如果您正在寻找一个。我希望广场在它们的位置保持直立,而不是在圆形路径中转动。我正在重新创建this gif

P.S.我知道这些圈子并不完全对齐,I asked about that before

回答

3

我做了样品。

http://jsdo.it/defghi1977/sQOc

罗伯特Longson的 “标记” 的做法是非常好的!谢谢!

<?xml version="1.0" standalone="no"?> 
<svg width="400px" height="400px" viewBox="-200 -200 400 400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" style="background-color:black;"> 
<defs> 
    <rect id="markerShape" x="-1" y="-1" width="2" height="2" fill="yellow"> 
     <animateTransform attributeName="transform" type="rotate" to="360,0,0" begin="0s" dur="30s" repeatCount="indefinite"/> 
    </rect> 

    <marker id="marker1" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.02,0.02)"/><!--NOTE: =1/50--> 
     <animate attributeName="orient" from="0" to="-30" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker2" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.01428,0.01428)"/><!--NOTE: =1/70--> 
     <animate attributeName="orient" from="0" to="-60" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker3" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.01111,0.01111)"/><!--NOTE: =1/90--> 
     <animate attributeName="orient" from="0" to="-90" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker4" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.00909,0.00909)"/><!--NOTE: =1/110--> 
     <animate attributeName="orient" from="0" to="-120" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker5" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.007692,0.007692)"/><!--NOTE: =1/130--> 
     <animate attributeName="orient" from="0" to="-150" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker6" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.00666,0.00666)"/><!--NOTE: =1/150--> 
     <animate attributeName="orient" from="0" to="-180" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 
    <marker id="marker7" markerUnits="strokeWidth" viewBox="-1 -1 2 2" overflow="visible" markerWidth="1" markerHeight="1"> 
     <use xlink:href="#markerShape" transform="scale(0.00588,0.00588)"/><!--NOTE: =1/180--> 
     <animate attributeName="orient" from="0" to="-210" begin="0s" dur="5s" repeatCount="indefinite"/> 
    </marker> 

    <polygon id="basicShape" fill="none" points=" 
     0,1 
     0.5,0.86603 
     0.86603,0.5 
     1,0 
     0.86603,-0.5 
     0.5,-0.86603 
     0,-1 
     -0.5,-0.86603 
     -0.86603,-0.5 
     -1,0 
     -0.86603,0.5 
     -0.5,0.86603" 
    /> 
</defs> 

<g> 
    <use xlink:href="#basicShape" transform="scale(50,50)" stroke-width="14" marker-mid="url(#marker1)" marker-start="url(#marker1)"/> 
    <animateTransform attributeName="transform" type="rotate" to="30,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
<g> 
    <use xlink:href="#basicShape" transform="scale(70,70)" stroke-width="15" marker-mid="url(#marker2)" marker-start="url(#marker2)"/> 
    <animateTransform attributeName="transform" type="rotate" to="60,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
    <g> 
    <use xlink:href="#basicShape" transform="scale(90,90)" stroke-width="16" marker-mid="url(#marker3)" marker-start="url(#marker3)"/> 
    <animateTransform attributeName="transform" type="rotate" to="90,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
<g> 
    <use xlink:href="#basicShape" transform="scale(110,110)" stroke-width="17" marker-mid="url(#marker4)" marker-start="url(#marker4)"/> 
    <animateTransform attributeName="transform" type="rotate" to="120,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
<g> 
    <use xlink:href="#basicShape" transform="scale(130,130)" stroke-width="18" marker-mid="url(#marker5)" marker-start="url(#marker5)"/> 
    <animateTransform attributeName="transform" type="rotate" to="150,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
<g> 
    <use xlink:href="#basicShape" transform="scale(150,150)" stroke-width="19" marker-mid="url(#marker6)" marker-start="url(#marker6)"/> 
    <animateTransform attributeName="transform" type="rotate" to="180,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
<g> 
    <use xlink:href="#basicShape" transform="scale(170,170)" stroke-width="21" marker-mid="url(#marker7)" marker-start="url(#marker7)"/> 
    <animateTransform attributeName="transform" type="rotate" to="210,0,0" begin="0s" dur="5s" repeatCount="indefinite"/> 
</g> 
</svg> 
+0

真棒回应!你知道有什么方法可以让它响应吗? –

+1

杀死root svg元素的宽度和高度属性,尽情享受吧! – defghi1977

2

stroke-dasharray是错误的方法,因为您不能影响短划线旋转。

更好的方法是在路径上使用方形markers,以便每个路径顶点都具有带有固定方向属性的标记。路径本身可以是透明的,所以只要标记是可见的。

+0

你能举一个圆形路径的例子吗?恐怕我不习惯语法 –

+0

http://tutorials.jenkov.com/svg/marker-element.html –

+0

是的,但我怎样才能获得多个标记(与我在演示中展示的一样多)一个圆形路径?看起来我只能在'marker-start','marker-mid'和'marker-end'处获得它们。 –