API веб-анимации: сбросить анимацию по требованию

1

У меня сложная анимация как комбинация KeyframeEffect, сгруппированных в GroupEffect и SequenceEffect. В очень упрощенной версии это выглядит примерно так, как представлено в этом JSBin https://jsbin.com/denucaq/edit?html,js,output

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

Я не могу использовать fill: 'none' так как разные элементы оживляют разные периоды времени, и все они должны оставаться в последней позиции до тех пор, пока все элементы не будут анимированы.

Итак, вопросы - вот что я должен написать в теле функции crazyWords.reset?

Теги:
animation

1 ответ

0

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

console.log(document.timeline);

У вас есть доступ к методу oncancel, поэтому вы можете использовать его для возврата изменений в зависимости от времени начала и текущего времени и т.д. (Здесь и происходит математика). Я также просто нашел обратный метод, который хорошо работает:

const allAnimations = document.timeline.getAnimations();
allAnimations.forEach((ani) => {
  ani.pause();
  console.log(ani.playState);
  ani.reverse();
});
  • 0
    Спасибо за ответ, @evanfuture. Но здесь есть некоторые проблемы :) Во-первых, я ищу что-то стандартное и простое вместо жесткого Math, потому что я могу обойти эту проблему, просматривая все анимированные элементы и сбрасывая их анимации (технически анимируя их для начала). Но это плохо пахнет. Когда дело доходит до getAnimations() это путь к широкому синусу, он включает CSS анимацию и так далее. Также, когда анимация завершена, document.timeline.getAnimations() возвращает пустой массив. Не могли бы вы обновить пример своим решением?
  • 0
    Сегодня напряженный день, но я попробую. Тем временем, любой другой должен чувствовать себя свободным / обязанным скинуться тоже.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню