重复SVG动画序列

时间:2014-05-08 09:52:22

标签: html animation svg svg-animate

我有一个17秒长的第二个动画,有多个部分。一旦完成,我怎么能重复整个序列? 我在每个repeatCount = "indefinite"上尝试了<animate>属性,但这让事情变得奇怪。这是我想要重复的动画,供参考或其他。

<rect x="185" y="300" width="300" height="400" fill="#666666">
    <animate
            attributeName="x"
            from="185" to="145"
            begin="5s"
            dur="2s"
            fill="freeze"
            />
    <animate
            attributeName="x"
            from="145" to="185"
            begin="9s"
            dur="2s"
            fill="freeze"
            />

    <animate
            attributeName="y"
            from="300" to="340"
            begin="11s"
            dur="2s"
            fill="freeze"
            />
        <animate
            attributeName="y"
            from="340" to="300"
            begin="15s"
            dur="2s"
            fill="freeze"
            />
</rect>

2 个答案:

答案 0 :(得分:1)

除了动画begin值是基于时钟的时间间隔外,它们也可以是基于同步的值,用于引用其他动画。

来自MDN Web Docs

  

&lt; syncbase-value&gt;
描述同步库和该同步库的可选偏移量。元素的动画开始时间是相对于另一个动画的开始或活动结束定义的。 syncbase包含对另一个动画元素的ID引用,后跟.begin或.end,以标识是否与引用的动画元素的开头或活动结束同步。

这意味着您可以通过引用彼此来将动画链接在一起&#39; ID为begin值。

基本上,您希望在上一个动画结束后开始动画。当最后一个动画结束时,它应该触发第一个动画再次开始。动画begin属性接受多个值,因此您可以为第一个动画指定两个值:5s延迟和最后一个动画的结束。

&#13;
&#13;
<svg viewBox="0 0 400 500" width="50%" height="50%">
  <rect x="50" y="10" width="300" height="400" fill="#666666">
    <animate
            id="anim1"
            attributeName="x"
            from="50" to="10"
            begin="5s;anim4.end"
            dur="2s"
            fill="freeze"
            />
    <animate
            id="anim2"
            attributeName="x"
            from="10" to="50"
            begin="anim1.end"
            dur="2s"
            fill="freeze"
            />
    <animate
            id="anim3"
            attributeName="y"
            from="10" to="50"
            begin="anim2.end"
            dur="2s"
            fill="freeze"
            />
    <animate
            id="anim4"
            attributeName="y"
            from="50" to="10"
            begin="anim3.end"
            dur="2s"
            fill="freeze"
            />
  </rect>
</svg>
&#13;
&#13;
&#13;

答案 1 :(得分:-1)

你可以试试这个:

<animate attributeName="x" values="185; 145; 185" begin="5s" dur="4s" fill="freeze"/>
<animate attributeName="y" values="300; 340; 300" begin="11s" dur="4s" fill="freeze"/>