Реверс анимации по маркеру

Пускаем анимацию в обратку по маркеру — очень удобная штука для анимации интерфейсов например. После каждого маркера анимация будет идти обратно. Этакий контролируемый loopOut(«pingpong»).

Применять на анимированное свойство:

Если во всем выражении marker заменить на thisComp.maker, то можно развернуть анимации всех слоев по маркеру композиции:

Немного теории

thisProperty — это текущее свойство слоя, к которому применено выражение. Если мы применяем это в position — то это будет position, в scale — будет scale.

t считает сколько времени прошло с первого маркера. Этот вариант выражения работает только с первым маркером, но несложно переписать его под любое число маркеров.

Для облегчения понимания я ввёл переменную lastKeyTime, которая считает время последнего ключевого кадра. Для этого я получаю число ключевых кадров для параметра — thisProperty.numKeys, а затем беру время ключа с номером, равным их количеству, то есть последнего, и вычитаю из него время, прошедшее с маркера. Таким образом, иду назад.

Ну и всем знакомый .valueAtTime дает нам значение параметра в нужное время, которое мы уже рассчитали.

Я добавил конструкцию try-catch для того, чтобы выражение не выкидывало ошибку если у вас нет ключевых кадров или маркера например.

Фактически мы просто заставляем выражение брать параметры из ключевых кадров то вперед то назад независимо от времени, для этого и нужен lastKeyTime и .valueAtTime

Просто вставляйте выражение в любой параметр, который надо развернуть.