Two.js предоставляет удобный API для работы с 2D-графикой на Canvas, SVG и WebGL. Для создания динамических и интерактивных анимаций часто используется библиотека GSAP (GreenSock Animation Platform). GSAP обеспечивает высокую производительность, плавность и удобное управление временными шкалами анимаций.
Взаимодействие двух библиотек строится на манипуляции свойствами
объектов Two.js через GSAP. Основные объекты Two.js, такие как
Two.Circle, Two.Rectangle,
Two.Path и группы Two.Group, имеют свойства,
которые можно анимировать напрямую.
Каждый объект Two.js имеет позиционные, размерные и визуальные свойства:
translation — объект с x и y,
задающий позицию.rotation — угол поворота в радианах.scale — масштаб по осям x и
y.opacity — прозрачность.fill и stroke — цвета заливки и
контура.Пример анимации с использованием GSAP:
const two = new Two({ width: 800, height: 600 }).appendTo(document.body);
const circle = two.makeCircle(400, 300, 50);
circle.fill = '#FF6F61';
circle.noStroke();
two.update();
gsap.to(circle.translation, {
x: 600,
y: 450,
duration: 2,
ease: "power2.inOut",
onUpdate: () => two.update()
});
Здесь GSAP анимирует объект translation по осям
x и y. Ключевой момент: каждое
изменение свойств требует вызова two.update(),
чтобы изменения отразились на холсте.
GSAP позволяет анимировать сразу несколько свойств объекта, включая цвета и прозрачность:
gsap.to(circle, {
duration: 3,
rotation: Math.PI * 2,
scaleX: 2,
scaleY: 0.5,
opacity: 0.3,
fill: "#4A90E2",
onUpdate: () => two.update()
});
rotation задается в радианах.scaleX и scaleY масштабируют объект по
отдельным осям.fill, stroke) GSAP автоматически
интерполирует.Для сложных последовательностей анимаций удобно использовать
gsap.timeline():
const tl = gsap.timeline({ repeat: -1, yoyo: true });
tl.to(circle.translation, { x: 700, y: 200, duration: 1 })
.to(circle, { rotation: Math.PI, scale: 1.5, duration: 1 })
.to(circle, { fill: "#E94E77", duration: 0.5 });
Особенности:
repeat: -1 — бесконечное повторение.yoyo: true — возврат к исходному состоянию после
завершения каждой итерации.Two.js поддерживает группы через Two.Group, что
позволяет анимировать несколько объектов одновременно:
const group = two.makeGroup(circle, two.makeRectangle(400, 300, 100, 50));
gsap.to(group.translation, { x: 200, y: 100, duration: 2, onUpdate: () => two.update() });
Все дочерние элементы группы перемещаются синхронно. Можно комбинировать анимацию групп с индивидуальной анимацией дочерних объектов для создания сложных сцен.
Для объектов типа Two.Path или Two.Polygon
можно анимировать отдельные вершины:
const polygon = two.makePolygon(300, 300, 6, 80);
gsap.to(polygon.vertices, {
duration: 2,
0: { x: 350, y: 250 },
1: { x: 320, y: 200 },
2: { x: 400, y: 220 },
onUpdate: () => two.update()
});
vertices содержит объекты с x и
y.two.update() после каждого
кадра.GSAP поддерживает колбэки:
onStart — при запуске анимации.onUpdate — на каждом кадре анимации.onComplete — по завершении анимации.Пример:
gsap.to(circle, {
duration: 1.5,
scale: 0.5,
onStart: () => console.log("Анимация началась"),
onComplete: () => console.log("Анимация завершена"),
onUpdate: () => two.update()
});
Колбэки позволяют синхронизировать другие действия или запускать дополнительные анимации.
two.update() на каждом кадре
обязателен для отражения изменений.gsap.timeline() упрощает
сложные последовательности.fill и stroke.Эти техники позволяют строить интерактивные и высокопроизводительные анимации на базе Two.js и GSAP, комбинируя трансформации, цвета и динамические изменения формы.