Рубрики
Без рубрики

Как анимировать SVG Signature

Давайте посмотрим, как анимировать SVG-сигнатуру с небольшим количеством JavaScript и CSS. Мы могли бы использовать функцию JavaScript для расчета длины пути SVG и анимации CSS, чтобы анимировать штрихов SVG.

Автор оригинала: Silvestar Bistrović.

Давайте посмотрим, как анимировать SVG-сигнатуру с небольшим количеством JavaScript и CSS. В этой демонстрировании я покажут вам, как использовать функцию JavaScript для расчета длины пути SVG и анимации CSS, чтобы анимировать штрихов SVG. Вы могли бы увидеть окончательный результат на О странице или Кодепен Отказ

Анимированная SVG Signature - S.Bistrović.

SVG Signature

Давайте начнем с создания подписи SVG. Я использую эскиз, чтобы сделать траги SVG для букв. Вот как это выглядит в режиме редактирования:

Скриншот путей подписи SVG в приложении эскиза.

Он содержит восемь разных путей для разных путей подписи. Например, один путь представляет букву «S», один путь представляет точку и так далее.

Как только я экспортировал SVG из эскиза, я переубил пути таким образом, что они появляются, как я хочу, чтобы они анимировали: сначала буква “, то точка, то буква” B “и так далее. Кроме того, я добавил Автограф и Автограф __Path Классы для облегчения JavaScript Manipution и стиль. Вот окончательный файл:


  
    
    
    
    
    
    
    
    
  

Важно сделать SVG с ударами, так как мы собираемся оживить удары. Каждый путь или ход имеет свою длину. Мы собираемся использовать эти удары и длину в нашей анимации.

Расчет JavaScript

Чтобы рассчитать длину хода, мы могли бы использовать ручной метод угадывания приблизительной длины. Мы должны использовать две атрибуты Dash в этом случае:

  • HIND-DASHARRAY , что делает удар разбитым, а
  • Инсульт-Tashoffset , что подталкивает положение инсульта из видимого пути.

Эти два свойства должны быть равны, чтобы он работал. Теперь мы могли бы попытаться догадаться, как долго длится ход. Но мы программисты, и нам не нужно догадаться: мы могли бы сделать это программно. Вот концепция того, как она должна работать:

  • Во-первых, мы устанавливаем общую желаемую продолжительность анимации.
  • Далее мы используем GetTollength () Функция для расчета общей длины пути в сочетании.
  • Далее мы рассчитываем продолжительность и задержки анимации для каждого пути с соотношением общего пути пути.
  • Далее мы устанавливаем HIND-DASHARRAY и Инсульт-Tashoffset который позиционирует пунктирное удаление за пределами видимого пути.
  • Наконец, мы начинаем анимацию, добавив класс Анимированные к телу документа.

Вот вся функция JavaScript (с комментариями для облегчения понимания):

const calcPaths = (totalDur) => {
  // unset 'animated' class to body which will reset the animation
  document.body.classList.add('animated')

  // get all SVG elements - lines and dots
  const paths = document.querySelectorAll('.autograph__path')

  // prepare path length variable
  let len = 0

  // prepare animation delay length variable
  let delay = 0

  // escape if no elements found
  if (!paths.length) {
    return false
  }

  // set duration in seconds of animation to default if not set
  const totalDuration = totalDur || 7

  // calculate the full path length
  paths.forEach((path) => {
    const totalLen = path.getTotalLength()
    len += totalLen
  })

  paths.forEach((path) => {
    const pathElem = path

    // get current path length
    const totalLen = path.getTotalLength()

    // calculate current animation duration
    const duration = totalLen / len * totalDuration

    // set animation duration and delay
    pathElem.style.animationDuration = `${duration < 0.2 ? 0.2 : duration}s`
    pathElem.style.animationDelay = `${delay}s`

    // set dash array and offset to path length - this is how you hide the line
    pathElem.setAttribute('stroke-dasharray', totalLen)
    pathElem.setAttribute('stroke-dashoffset', totalLen)

    // set delay for the next path - added .2 seconds to make it more realistic
    delay += duration + 0.2
  })

  // set 'animated' class to body which will start the animation
  document.body.classList.add('animated')
  return true
}
calcPaths(5)

Обязательно проверьте Совместимость браузера Прежде чем использовать эту технику.

CSS анимация

Анимация CSS состоит из установки окончательного Инсульт-Tashoffset вернуться к нулю.

Я использовал линейный для Функция анимации-синхронизации и вперед для Режим анимации-заполнения Отказ Первый атрибут делает анимацию линейной, что казалось самым естественным для меня. Второй говорит анимацию, чтобы остаться в 100% государстве.

.autograph__path {
  opacity: 0;
  animation-timing-function: linear;
  animation-fill-mode: forwards;

  .animated & {
    opacity: 1;
    animation-name: line;
  }
}

@keyframes line {
  100% {
    stroke-dashoffset: 0;
  }
}

Я использовал непрозрачность, чтобы предотвратить Flick во время загрузки. Он работает лучше при использовании в сочетании с критическими CSS.

Заключение

Там у вас есть, анимированная сигнатура SVG. С небольшим количеством SVG, JavaScript и CSS знания, вы можете создать привлекательный анимацию рисования. Я нашел более пару плагинов, которые обрабатывают анимацию, как этот, но я всегда предпочитаю, используя меньше кода. Я сделал эту демонстрацию менее чем за 100 строк кода. Смотрите полную демонстрацию здесь: