Прежде чем погрузиться в разработку программного обеспечения, я потратил время на изучение моушн-дизайна как области. Удивительно, но между двумя отраслями есть несколько вещей, и одна из них — ключевые кадры анимации.

Если вы работали в индустрии анимации или кинопроизводства, скорее всего, вы уже слышали термин «ключевой кадр». Ключевые кадры важны для создания плавных переходов — они определяют начальную и конечную точки. Учитывая установленный период времени между началом и концом, вы сможете создать плавный переход. Если вы когда-либо создавали новое веб-приложение с помощью командной строки create-react-app, скорее всего, вы также сталкивались с термином «ключевые кадры», хотя и выбрасывали все в App.css.

Чего ждать?

Помните, когда вы перешли в корневой каталог своего проекта, запустили
npm run start, ваш браузер волшебным образом загрузил localhost:3000, и на странице появился вращающийся логотип React? Ну, это часть того, что помогло создать эту анимацию. Я считаю, что это отличный пример для понимания того, как работает анимация, поэтому давайте разберем его по частям.

В нашем index.js есть такая строка:

<img src={logo} className=”App-logo” alt=”logo” />

Связанное имя класса относится к нашему css, где мы добавили ограничение по высоте.

В нашем файле App.css у нас есть несколько строк, на которые стоит обратить внимание:

.App-logo {
  height: 40vmin;
  animation: App-logo-spin infinite 20s linear;
}
@keyframes App-logo-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.App-logo — это имя класса, связанное с нашим изображением. Мы задали ограничение по высоте, но следующая строка может быть не такой знакомой.

animation: App-logo-spin infinite 20s linear;

Здесь мы привязываем анимацию App-logo-spin к определенному классу App-logo. Анимация свойства на самом деле является сокращенным правилом, которое можно разбить на несколько отдельных свойств анимации, а точнее на четыре.

/*specifies the name of the animation that you want to bind to the element */
animation-name: App-logo-spin;
/* specifies how many times an animation should run */
animation-iteration-count: infinite;
/* defines how long an animation should take to complete */
animation-duration: 20s;
/* specifies speed curve of the animation */
animation-timing-function: linear; 

На самом деле есть два дополнительных свойства, которые можно включить в сокращение:

/* specifies a delay for the start of an animation */
animation-delay: 0s;
/* specifies the direction of the animation. */
animation-direction: normal;

Итак, теперь мы подошли к фактическим ключевым кадрам, которые описывают анимацию.

/* declares an animation called App-logo-spin */
@keyframes App-logo-spin {
  /* define the start */
  from {
    /* starting animation style properties go here*/
    transform: rotate(0deg);
  }
}
  /* define the end */
  to {
    /* ending animation style properties go here */
    transform: rotate(360deg);
  }
}

Если вам не нравятся термины from/to, вы также можете представить анимацию с точки зрения продолжительности прогресса и вместо этого заменить ее процентами, записанными следующим образом:

@keyframes App-logo-spin {
  0% {
    transform: rotate(0deg)
  }
  100% {
    transform: rotate(360deg)
  }
}

Где 0% определяет начало, а 100% определяет конец. Кроме того, вы также можете определить любые промежуточные проценты (например, 20%, 25%, 50% и т. д.) и свойства, которые вы хотите связать с анимацией во время ее выполнения.

И это основы анимации ключевых кадров CSS:создайте элемент, определите начальные и конечные ключевые кадры, добавьте некоторые свойства, которые вы хотите видеть в начале и в конце, и привяжите их к элементу, чтобы он всплывал. в вашем веб-приложении.

… А еще есть альтернатива Javascript:

document.getElementByClassName("App-Logo")[0].animate([
  // keyframes
  { transform: 'rotate(0deg)' },
  { transform: 'rotate(360deg)' }
], {
  // timing options
  duration: 20s,
  iterations: Infinity
});

Итак… подождите, а при чем здесь After Effects?

Если вы не знакомы с After Effects, это программное обеспечение для анимации, являющееся частью Adobe Creative Cloud, используемое многими художниками и профессионалами в области постпродакшна для создания фильмов, анимационной графики. и композиции 2,5/3D.

Навигация в After Effects для создания простой анимации может показаться довольно пугающей: для перемещения по графическому пользовательскому интерфейсу требуются слои, ключевые кадры, эффекты и средства визуализации. Я сомневаюсь, что большинство людей когда-либо будут заниматься After Effects в качестве хобби, но если вы когда-нибудь задумывались об этом и имели опыт программирования, вы были бы рады узнать, что в After Effects есть кое-что интересное:

Чего ждать?

В качестве очень краткого обзора выражения в After Effects — это код, который вы можете подключить к своей композиции, который вычисляет одно значение для одного свойства слоя в определенный момент времени. Интересная часть? Они написаны на Javascript! Выражения — это, по сути, функции дизайна, которые помогают художникам создавать желаемые эффекты для свойств. Есть несколько встроенных, таких как wiggle(frequency, amplitude), который рандомизирует значение свойства в зависимости от частоты, но вы, кто-то со знанием Javascript и некоторым творческим потенциалом, можете написать свое собственное.

Возможность создавать ключевые кадры и работать с ними имеет основополагающее значение для создания красивых анимаций. У CSS плохая репутация, но, типа… сейчас CSS крут?