Search code examples
animationsvgtiming

How to prevent animation easing / delay in SVG when looping?


Example, I want to make a SVG loader animation.

I got some transition / easing / delay when looping (I dont know what to call sorry)

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 590 100">
  <circle id="a1" cx="70" cy="70" r="20"/>
  <circle id="a2" cx="120" cy="70" r="20"/>
  <circle id="a3" cx="170" cy="70" r="20"/>
  <circle id="a4" cx="220" cy="70" r="20"/>
  <circle id="a5" cx="270" cy="70" r="20"/>
  <circle id="a6" cx="320" cy="70" r="20"/>
  <circle id="a7" cx="370" cy="70" r="20"/>
  <circle id="a8" cx="420" cy="70" r="20"/>
  <circle id="a9" cx="470" cy="70" r="20"/>
  <circle id="a10" cx="520" cy="70" r="20"/>
  <animate xlink:href="#a1" attributeName="visibility" from="hidden" to="visible" begin="0.1s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a2" attributeName="visibility" from="hidden" to="visible" begin="0.2s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a3" attributeName="visibility" from="hidden" to="visible" begin="0.3s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a4" attributeName="visibility" from="hidden" to="visible" begin="0.4s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a5" attributeName="visibility" from="hidden" to="visible" begin="0.5s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a6" attributeName="visibility" from="hidden" to="visible" begin="0.6s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a7" attributeName="visibility" from="hidden" to="visible" begin="0.7s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a8" attributeName="visibility" from="hidden" to="visible" begin="0.8s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a9" attributeName="visibility" from="hidden" to="visible" begin="0.9s" dur="1s" repeatCount="indefinite" />
  <animate xlink:href="#a10" attributeName="visibility" from="hidden" to="visible" begin="1s" dur="1s" repeatCount="indefinite" />
</svg>

Look at this demo : Those dots doesnt gone when animation done.

I just want to show dot running (one dot) (current demo is showing about 4 dots running)

How should i do , what I am missing ?


Solution

  • Aha, I think I got it by using value

    Example : (10 steps)

    values="visible;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;"
    

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 590 100">
      <circle id="a1" cx="70" cy="70" r="20"/>
      <circle id="a2" cx="120" cy="70" r="20"/>
      <circle id="a3" cx="170" cy="70" r="20"/>
      <circle id="a4" cx="220" cy="70" r="20"/>
      <circle id="a5" cx="270" cy="70" r="20"/>
      <circle id="a6" cx="320" cy="70" r="20"/>
      <circle id="a7" cx="370" cy="70" r="20"/>
      <circle id="a8" cx="420" cy="70" r="20"/>
      <circle id="a9" cx="470" cy="70" r="20"/>
      <circle id="a10" cx="520" cy="70" r="20"/>
      <animate xlink:href="#a1" attributeName="visibility" begin="0s" dur="1.3s" values="visible;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a2" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;visible;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a3" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;visible;hidden;hidden;hidden;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a4" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;visible;hidden;hidden;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a5" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;visible;hidden;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a6" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;hidden;visible;hidden;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a7" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;hidden;hidden;visible;hidden;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a8" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;hidden;hidden;hidden;visible;hidden;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a9" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;visible;hidden;" calcMode="linear" repeatCount="indefinite" />
      <animate xlink:href="#a10" attributeName="visibility" begin="0s" dur="1.3s" values="hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;hidden;visible;" calcMode="linear" repeatCount="indefinite" />
    </svg>