В библиотеке Two.js размер холста определяется при
создании экземпляра Two через объект конфигурации. Основные
параметры:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg // или canvas, webgl
}).appendTo(document.body);
svg, canvas,
webgl).Для динамической подгонки под размер окна можно использовать:
two.renderer.setSize(window.innerWidth, window.innerHeight);
Это позволяет сцене автоматически масштабироваться при изменении размеров окна.
Two.js использует координатную систему с началом в
левом верхнем углу, где x увеличивается вправо, а
y — вниз. Масштаб сцены можно регулировать с помощью
свойств scale объектов Group и отдельных
фигур:
const rect = two.makeRectangle(0, 0, 100, 50);
rect.scale = 2; // увеличивает размеры в 2 раза
Масштаб применяется к фигуре относительно её центра. Для более сложных объектов можно группировать фигуры:
const group = two.makeGroup(rect, circle);
group.scale = 1.5; // масштабирование всех фигур внутри группы
Важно: изменение масштаба через свойство
scale влияет на все последующие трансформации фигуры,
включая позицию, вращение и анимацию.
Толщина и стиль линий задаются через свойства linewidth
и stroke:
rect.linewidth = 5; // толщина линии 5 пикселей
rect.stroke = '#ff0000'; // цвет обводки
Дополнительно можно контролировать:
butt,
round, square).miter,
round, bevel).Пример с эффектом скругления углов и прозрачностью:
rect.linewidth = 4;
rect.stroke = '#00ff00';
rect.strokeOpacity = 0.7;
rect.cap = 'round';
rect.join = 'round';
Фигуры можно закрашивать цветом или градиентом:
rect.fill = '#0000ff'; // сплошной цвет
rect.opacity = 0.5; // прозрачность заливки
Для сложных визуальных эффектов Two.js поддерживает
градиенты, задаваемые через объект
Two.Gradient:
const gradient = new Two.LinearGradient(0, 0, 100, 0, [
new Two.Stop(0, '#ff0000'),
new Two.Stop(1, '#0000ff')
]);
rect.fill = gradient;
Толщина линий (linewidth) воспринимается по-разному в
зависимости от рендерера. В svg и canvas она
масштабируется вместе с объектом при изменении scale, в
webgl — часто остаётся постоянной. Для точного контроля
рекомендуется:
linewidth
пропорционально scale.scale = 1 и управлять масштабом только позициями.Объекты текста также подчиняются правилам масштаба и начертания:
const text = two.makeText('Hello Two.js', 100, 100, {
size: 24, // размер шрифта
family: 'Arial', // шрифт
weight: 700, // жирность
style: 'italic' // курсив
});
text.fill = '#333333';
Основные свойства текста:
size — размер шрифта в пикселях.family — семейство шрифтов.weight — толщина начертания (normal,
bold, числовые значения 100–900).style — стиль (normal,
italic, oblique).alignment — выравнивание (left,
center, right).Текстовые объекты реагируют на scale точно так же, как
фигуры, поэтому изменение размера шрифта и масштабирование можно
комбинировать для гибкой настройки визуала.
Two.js позволяет комбинировать размеры, масштаб, вращение и позицию для создания сложных визуальных композиций:
const circle = two.makeCircle(0, 0, 50);
circle.fill = '#ff6600';
circle.linewidth = 3;
const group = two.makeGroup(rect, circle);
group.translation.set(200, 150);
group.rotation = Math.PI / 6;
group.scale = 1.8;
translation — смещение объекта по координатам
x и y.rotation — угол вращения в радианах.scale — коэффициент масштабирования.Эти свойства позволяют создавать анимации с изменением размера, перемещением и вращением одновременно, сохраняя относительные пропорции объектов.
Для динамических изменений размеров и линий Two.js использует метод
bind с анимацией через two.update():
two.bind('update', function(frameCount) {
rect.scale = 1 + 0.5 * Math.sin(frameCount * 0.05);
rect.linewidth = 2 + Math.abs(Math.sin(frameCount * 0.05)) * 3;
}).play();
frameCount — номер текущего кадра.scale и linewidth можно изменять в
реальном времени для плавной анимации.Это позволяет создавать эффекты пульсации, увеличения или динамической трансформации объектов в сцене.
Эти инструменты дают полный контроль над размерами, масштабом и визуальным стилем фигур и текста в Two.js, позволяя создавать сложные и интерактивные графические сцены на веб-странице.