У меня сложная анимация как комбинация KeyframeEffect, сгруппированных в GroupEffect и SequenceEffect. В очень упрощенной версии это выглядит примерно так, как представлено в этом JSBin https://jsbin.com/denucaq/edit?html,js,output
Проблема в том, что я должен в любой момент сбросить все изменения, сделанные анимацией, чтобы, возможно, повторно запустить анимацию или сделать что-то еще.
Я не могу использовать fill: 'none'
так как разные элементы оживляют разные периоды времени, и все они должны оставаться в последней позиции до тех пор, пока все элементы не будут анимированы.
Итак, вопросы - вот что я должен написать в теле функции crazyWords.reset
?
Это потребует немного математики, но вы можете получить всю необходимую информацию из самих методов. Попробуйте поместить это в функцию сброса, а затем щелкнуть по нему в разное время:
console.log(document.timeline);
У вас есть доступ к методу oncancel, поэтому вы можете использовать его для возврата изменений в зависимости от времени начала и текущего времени и т.д. (Здесь и происходит математика). Я также просто нашел обратный метод, который хорошо работает:
const allAnimations = document.timeline.getAnimations();
allAnimations.forEach((ani) => {
ani.pause();
console.log(ani.playState);
ani.reverse();
});
getAnimations()
это путь к широкому синусу, он включает CSS анимацию и так далее. Также, когда анимация завершена,document.timeline.getAnimations()
возвращает пустой массив. Не могли бы вы обновить пример своим решением?