Могу ли я создать круг, который следует за существующей линией в svg?

#svg

#svg

Вопрос:

Как следует из названия, я пытаюсь создать анимацию в svg с точкой / окружностью, которая следует нерегулярному пути. Например, я использую animateTransform:

 <animateTransform attributeName="transform"
                  attributeType="XML"
                  type="translate"
                  from="0 60 70"
                  to="360 60 70"
                  dur="10s"
                  repeatCount="definite"/>
 

Могу ли я реализовать этот метод (в svg), чтобы круг следовал по пути, или я должен обязательно использовать javascript?
Если я смогу сделать это в svg, не могли бы вы дать мне простой пример с объяснением?

Ответ №1:

Вы можете использовать <animateMotion> элемент.

Пример, адаптированный из MDN:

 <svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
  <path id="path" fill="none" stroke="lightgrey"
    d="M20,50 C20,-50 180,150 180,50 C180-50 20,150 20,50 z" />

  <circle r="5" fill="red">
    <animateMotion dur="10s" repeatCount="indefinite">
      <mpath xlink:href="#path"/>
    </animateMotion>
  </circle>
</svg> 

Комментарии:

1. Это плохая привычка спрашивать, прежде чем проводить тщательное исследование. Спасибо большое!