Для начала работы с Two.js необходимо подключить библиотеку. Обычно это делается через CDN или установкой через npm:
<script src="https://cdnjs.cloudflare.com/ajax/libs/two.js/0.7.0/two.min.js"></script>
Или через npm:
npm install two.js
После подключения создаётся экземпляр Two с настройками сцены:
const elem = document.getElementById('draw-shapes');
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg // Можно использовать 'webgl' или 'canvas'
}).appendTo(elem);
Параметры конструктора:
width и height — размеры области
рисования.type — тип рендеринга (svg,
canvas, webgl).autostart — автоматически ли запускать анимацию.Two.js предоставляет несколько базовых фигур:
const rect = two.makeRectangle(200, 100, 150, 80);
rect.fill = '#FF8000';
rect.stroke = '#000000';
rect.linewidth = 4;
const circle = two.makeCircle(400, 200, 50);
circle.fill = '#00BFFF';
circle.stroke = '#000';
circle.linewidth = 3;
const ellipse = two.makeEllipse(600, 150, 80, 40);
ellipse.fill = '#32CD32';
ellipse.stroke = '#000';
ellipse.linewidth = 2;
const line = two.makeLine(100, 300, 300, 350);
line.stroke = '#FF1493';
line.linewidth = 5;
const path = two.makePath(400, 400, 500, 450, 600, 400, true);
path.fill = 'none';
path.stroke = '#8A2BE2';
path.linewidth = 4;
const polygon = two.makePolygon(700, 400, 50, 5); // центр, радиус, количество сторон
polygon.fill = '#FFD700';
polygon.stroke = '#000';
polygon.linewidth = 3;
Каждая фигура создаётся методом makeShape, и
возвращаемый объект можно анимировать или модифицировать.
Two.js поддерживает следующие трансформации для объектов:
position — позиция центра
(shape.position.set(x, y)).scale — масштаб (shape.scale = 2 или
shape.scale = new Two.Vector(2, 1.5)).rotation — вращение в радианах
(shape.rotation = Math.PI / 4).translation через shape.translation или
изменение position.Пример вращения:
two.bind('upd ate', function(frameCount) {
rect.rotation += 0.01;
}).play();
Цвет можно задавать через fill и stroke.
Для градиентов используется Two.Gradient:
const gradient = two.makeLinearGradient(0, 0, 0, 100,
new Two.Stop(0, '#FF0000'),
new Two.Stop(1, '#0000FF')
);
circle.fill = gradient;
Типы градиентов:
LinearGradient — линейный градиент.RadialGradient — радиальный градиент.Two.js имеет встроенный механизм анимации через
Two.bind('update', callback) и
two.play():
two.bind('update', function(frameCount) {
circle.scale = 1 + Math.sin(frameCount * 0.05) * 0.5;
rect.rotation += 0.02;
}).play();
frameCount — количество кадров с начала анимации.Anime.js позволяет создавать плавные анимации без необходимости вручную управлять кадрами. Примеры интеграции:
anime({
targets: circle,
scale: 2,
duration: 2000,
direction: 'alternate',
loop: true,
easing: 'easeInOutQuad',
update: function(anim) {
two.update(); // Обновление сцены Two.js
}
});
Особенности работы:
targets — объекты Two.js. Используются
свойства position, rotation,
scale, opacity, fill (для
цвета).duration — время анимации в
миллисекундах.direction — alternate для
обратной анимации.loop — бесконечное повторение.easing — функция плавности
анимации.Пример анимации цвета:
anime({
targets: rect,
fill: ['#FF8000', '#32CD32'],
duration: 3000,
direction: 'alternate',
loop: true,
easing: 'linear',
update: () => two.update()
});
Two.js поддерживает группировку объектов через
Two.Group:
const group = two.makeGroup(circle, rect, ellipse);
group.translation.se t(100, 50);
group.rotation = Math.PI / 8;
Анимация группы через Anime.js:
anime({
targets: group.translation,
x: 400,
y: 300,
duration: 2500,
easing: 'easeInOutSine',
update: () => two.update()
});
Two.js позволяет создавать линии с кривыми Bezier и Spline:
const curve = two.makeCurve(
new Two.Anchor(50, 400, 150, 350, 250, 450),
new Two.Anchor(300, 400, 350, 350, 450, 450),
true
);
curve.stroke = '#FF4500';
curve.linewidth = 4;
anime({
targets: curve.vertices,
0: { x: 100, y: 350 },
1: { x: 400, y: 400 },
duration: 2000,
direction: 'alternate',
loop: true,
easing: 'easeInOutQuad',
update: () => two.update()
});
(x, y).Two.js поддерживает привязку событий через стандартный DOM или через Two.Events:
circle._renderer.elem.addEventListener('click', () => {
anime({
targets: circle,
scale: 3,
duration: 1000,
easing: 'easeOutElastic',
update: () => two.update()
});
});
_renderer.elem — элемент SVG или Canvas, используемый
для рендеринга.Two.Types.webgl.two.update() при анимации
Anime.js.[startColor, endColor].Хотите, я могу подготовить следующий блок с комплексным примером сцены с несколькими анимированными фигурами и кривыми, который объединяет все вышеописанные приёмы?