Для создания сцены в Two.js используется объект Two,
который управляет всей графикой и рендерингом. Основные параметры при
инициализации:
const elem = document.getElementById('draw-area');
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg // Возможные значения: svg, canvas, webgl
}).appendTo(elem);
svg для
векторной графики, canvas — растровый холст,
webgl — GPU-ускоренный рендеринг.appendTo() привязывает рендеринг к
DOM-элементу.После создания сцены объекты добавляются к корневому элементу через
метод add().
Two.js поддерживает множество примитивов: линии, круги, прямоугольники, многоугольники, текст. Примеры создания:
const circle = two.makeCircle(400, 300, 50);
circle.fill = '#FF8000';
circle.stroke = '#000000';
circle.linewidth = 2;
const rectangle = two.makeRectangle(200, 150, 100, 50);
rectangle.fill = '#0080FF';
rectangle.opacity = 0.7;
После создания объекта его можно анимировать или изменять свойства в реальном времени.
Основная идея реактивного обновления в Two.js — изменения свойств
объекта автоматически отражаются на рендеринге сцены после вызова метода
two.update().
circle.radius = 80;
circle.fill = '#00FF00';
two.update();
Важно: изменения без вызова
two.update() не появятся на экране при svg или
canvas. WebGL-рендеринг может обновляться автоматически при
использовании анимации через
two.bind('upd ate', callback).
Two.js предоставляет встроенный механизм анимации через
two.bind('update', callback) и two.play():
two.bind('update', function(frameCount, timeDelta) {
circle.rotation += 0.01;
rectangle.scale = 1 + Math.sin(frameCount * 0.05) * 0.5;
}).play();
update,
обновляются каждый кадр.Эта техника позволяет создавать динамические, интерактивные сцены с постоянным реактивным обновлением.
Two.js поддерживает группы (Group), что облегчает
массовое управление объектами:
const group = two.makeGroup(circle, rectangle);
group.translation.se t(100, 50);
group.rotation = Math.PI / 4;
Реактивность усиливается использованием динамических зависимостей через функции:
two.bind('upd ate', function() {
circle.radius = 30 + Math.sin(Date.now() * 0.005) * 20;
rectangle.rotation += 0.02;
});
Two.js позволяет реагировать на события мыши или клавиатуры, изменяя объекты сцены:
elem.addEventListener('mousemove', function(e) {
circle.translation.se t(e.offsetX, e.offsetY);
two.update();
});
two.update() обеспечивает моментальное
отображение изменений.two.update() —
лучше собирать все изменения и обновлять сцену один раз.update вместо
постоянного ручного обновления свойств.Смешение событийной и таймфреймовой реактивности создаёт интерактивные эффекты:
two.bind('update', function() {
rectangle.rotation += 0.01;
});
elem.addEventListener('click', function() {
circle.fill = circle.fill === '#FF0000' ? '#00FF00' : '#FF0000';
two.update();
});
two.play();
Свойства объектов могут привязываться к данным из API, массива или состояния приложения:
const data = [50, 100, 75, 120];
two.bind('update', function() {
for (let i = 0; i < data.length; i++) {
let bar = two.makeRectangle(i * 60 + 50, 300 - data[i]/2, 50, data[i]);
bar.fill = '#3366CC';
}
}).play();
Эти подходы формируют основу реактивного обновления сцены в Two.js, позволяя создавать как простые анимации, так и сложные интерактивные визуализации с динамическим управлением объектами и их свойствами.