Визуальная отладка timeline

Timeline в anime.js представляет собой мощный инструмент для создания последовательных и параллельных анимаций. Он позволяет объединять несколько анимационных объектов в одну цепочку и управлять их временем и синхронизацией с высокой точностью.

Создание timeline выполняется через функцию anime.timeline(). Основной синтаксис:

const tl = anime.timeline({
  easing: 'easeOutExpo',
  duration: 1000,
});

Ключевые параметры timeline:

  • easing – задает общую кривую анимации для всех шагов. Индивидуальные анимации могут переопределять этот параметр.
  • duration – стандартная длительность всех анимаций, если не указана собственная.
  • loop – позволяет зациклить все анимации в timeline.
  • directionnormal, reverse, alternate для управления направлением воспроизведения.

Добавление анимаций в timeline

Анимации добавляются с помощью метода .add(). Этот метод принимает объект с параметрами анимации:

tl.add({
  targets: '.box',
  translateX: 250,
  backgroundColor: '#FF0000',
  duration: 1000,
})
.add({
  targets: '.circle',
  scale: 2,
  duration: 500,
  offset: '-=500' // смещение относительно предыдущей анимации
});

Особенности параметра offset:

  • Число (в миллисекундах) – абсолютное смещение от начала timeline.
  • '+' или '-' – смещение относительно предыдущей анимации, например '-=200' запускает анимацию на 200 мс раньше окончания предыдущей.
  • 'start' или 'end' – начало или конец timeline.

Визуальная отладка timeline

Для сложных последовательностей анимаций важна визуальная отладка. Основные подходы:

1. Цветовое кодирование

Присвоение различного цвета элементам на разных этапах timeline помогает определить порядок и длительность анимаций.

tl.add({
  targets: '.box1',
  translateY: 100,
  backgroundColor: '#00FF00'
})
.add({
  targets: '.box2',
  translateY: 100,
  backgroundColor: '#0000FF'
});

2. Временные метки

Anime.js позволяет использовать метки (labels) для точного позиционирования анимаций.

tl.add({
  targets: '.box',
  translateX: 200,
  duration: 800,
}, 'phase1')
.add({
  targets: '.circle',
  scale: 1.5,
  duration: 500,
}, 'phase1+=200'); // запускается через 200 мс после метки

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

3. Просмотр текущего состояния

Метод .seek() позволяет перемещать timeline в любое место по времени для проверки промежуточных состояний.

tl.seek(500); // устанавливает timeline на 500 мс

Методы .pause(), .play() и .reverse() помогают тестировать последовательности без полного воспроизведения.

Отладочные утилиты

  • Консольное логирование прогресса:
tl.add({
  targets: '.box',
  translateX: 300,
  duration: 1000,
  update: anim => console.log(anim.progress)
});

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

  • Использование прозрачности для тестирования слоев:

При сложных наложениях элементов временно можно изменить opacity для выявления конфликтов:

tl.add({
  targets: '.layer1',
  opacity: [0, 1],
  duration: 600
});

Пошаговое воспроизведение

Timeline поддерживает пошаговое воспроизведение с помощью метода .tick() в сочетании с requestAnimationFrame. Это особенно полезно для точной отладки сложных сцен.

function step() {
  tl.tick();
  requestAnimationFrame(step);
}
step();

Рекомендации по визуальной отладке

  1. Разбивать timeline на логические блоки и использовать метки.
  2. Цветовое кодирование элементов помогает быстро выявить проблемы синхронизации.
  3. Регулярно использовать .seek() для контроля промежуточных состояний.
  4. Логирование прогресса и параметров анимаций позволяет детально анализировать поведение timeline.
  5. Включать прозрачность и другие визуальные индикаторы для слоёв и перекрывающихся объектов.

Эти техники позволяют точно управлять сложными анимационными цепочками, ускоряют отладку и повышают читаемость кода при работе с anime.js.