Руководство для начинающих о том, как анимировать круг SVG.

Прежде чем мы начнем, я хочу признать, что я новичок в SVG (масштабируемой векторной графике). В результате я провел много исследований о том, как работает SVG. Наконец-то у меня появилось базовое понимание этого. Итак, вкратце, эта статья представляет собой руководство для начинающих для тех, кто интересуется SVG <circle>.

Создание круга SVG

Первый вопрос: Как построить круг? Начнем с простой математики! Длина окружности = 2*ПИ*радиус.

Формула: C = 2 × π × r

<svg>
  <circle cx="100" cy="100" r="75" />
</svg>

Если вы скопируете и вставите код в codepen.io, вы получите неполный круг. Почему? Когда вы проверите элемент <circle>, вы узнаете ответ.

Является ли координата оси Y (cy) проблемой?

В качестве решения мы можем изменить значение cy на 75, чтобы центрировать элемент <circle> по оси Y. Точно так же для значения cx разделите 300 на 2.

Код, как показано ниже:

<svg>
  <circle cx="150" cy="75" r="75" />
</svg>

Центрировать SVG

Следующий шаг является необязательным. Если вы хотите центрировать свой SVG на веб-странице, вы можете следовать приведенному ниже коду:

svg {
  background: #ffece3;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

Анимируйте это

Я планирую анимировать круг по часовой стрелке. Итак, я добавляю свойство CSS stroke-width к 10px.

circle {
    fill: transparent;
    stroke: orange;
    stroke-width: 10px;
}

Ой! Элементу <circle> не хватает места. Увеличим «пространство». Итак, добавьте около 400 пикселей для свойств CSS width и height к элементу SVG. И ваш элемент <circle> снова не размещался в центре веб-страницы.

Затем вам нужно снова отрегулировать его, разделив значение ширины и высоты на 2 или используя значение процентов (%), чтобы указать координаты по осям X и Y. .

<svg>
  <circle cx="50%" cy="50%" r="75" />
</svg>

Далее нам нужно знать свойства stroke-dasharray и stroke-dashoffsetCSS для анимации.

Свойство stroke-dasharray в CSS предназначено для создания тире в обводке фигур SVG. Из CSS-Trick.

Как узнать stroke-dasharray <circle> элементов?

Существует формула для вычисления свойства stroke-dasharray элемента <circle>. Я нашел решения здесь!

Для элемента <circle> свойство stroke-dasharray представляет длину окружности.

Итак, мы можем получить максимальноезначение свойства stroke-dasharray. Чем ниже значение, тем больше расстояние между дефисами в штрихе для элемента <circle>.

circle {
    fill: transparent;
    stroke: orange;
    stroke-width: 10px;
    stroke-dasharray: 471;
}

Свойство stroke-dashoffset в CSS определяет место на пути SVG, где начинается тире stroke. Из CSS-Trick.

Я играл со свойством stroke-dashoffset с разными значениями. Вот результаты:

Если вы поместите то же значение со значением stroke-dasharray, вы получите пустой кружок. Итак, мы собираемся анимировать свойство stroke-dashoffset. Теперь мы можем объявить анимацию для элемента <circle>.

circle {
  fill: transparent;
  stroke: orange;
  stroke-width: 10px;
  stroke-dasharray: 471;
  stroke-dashoffset: 471;
  animation: clock-animation 10s linear infinite;
}
@keyframes clock-animation {
  0% {
    stroke-dashoffset: 471;
  }
  100% {
    stroke-dashoffset: 0;
  }
}

Вопрос: начальная точка анимации справа от круга? Как сделать так, чтобы начальная точка начиналась сверху?

Решения. Поверните круг на -90 градусов. И не забудьте добавить свойство transform-origin в center.

circle {
  fill: transparent;
  stroke: orange;
  stroke-width: 10px;
  stroke-dasharray: 471;
  stroke-dashoffset: 471;
  animation: clock-animation 10s linear infinite;
  transform: rotate(-90deg);
  transform-origin: center;
}

Вы также можете изменить направление на против часовой стрелки. Просто измените код анимации.

@keyframes anti-clock-animation {
  0% {
    stroke-dashoffset: 0;
  }
  100% {
    stroke-dashoffset: 471;
  }
}

Дополнительные возможности:

А если вы хотите, чтобы анимировался полный круг, просто увеличьте значение stroke-width. Допустим, радиус круга равен 75, затем удвойте значение, равное 150px.

Заключение

Надеюсь, вам понравится это руководство по SVG. Спасибо за чтение! Здесь я прикрепил исходный код.

Анимация обводки круга SVG

Полная круговая анимация SVG

Удачного кодирования!

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.