В Two.js для работы с графикой используется объект
Two и его примитивы. Закругленные прямоугольники создаются
с помощью класса Two.Rectangle, которому можно передать
дополнительные параметры для задания радиуса скругления углов.
Для начала создается экземпляр Two с указанием размеров холста:
const elem = document.getElementById('drawing');
const two = new Two({
width: 800,
height: 600,
autostart: true
}).appendTo(elem);
Параметр autostart позволяет автоматически запускать
рендеринг анимации после создания фигур.
Базовый прямоугольник создается так:
const rect = two.makeRectangle(400, 300, 200, 100);
Здесь:
400, 300 — координаты центра прямоугольника;200, 100 — ширина и высота.Для скругления углов используется свойство radius:
rect.radius = 20;
rect.fill = '#3498db';
rect.stroke = '#2980b9';
rect.linewidth = 4;
Пояснения:
radius задает радиус закругления углов в пикселях. При
значении 0 углы остаются острыми.fill отвечает за заливку фигуры.stroke и linewidth управляют цветом и
толщиной обводки.В стандартной реализации Two.js Two.Rectangle
поддерживает единый радиус для всех углов. Для разных значений
скругления углов необходимо использовать метод path с
ручным построением:
const x = 400, y = 300, w = 200, h = 100;
const rTopLeft = 20, rTopRight = 40, rBottomRight = 10, rBottomLeft = 30;
const shape = two.makePath(
x - w/2 + rTopLeft, y - h/2,
x + w/2 - rTopRight, y - h/2,
x + w/2, y - h/2 + rTopRight,
x + w/2, y + h/2 - rBottomRight,
x + w/2 - rBottomRight, y + h/2,
x - w/2 + rBottomLeft, y + h/2,
x - w/2, y + h/2 - rBottomLeft,
x - w/2, y - h/2 + rTopLeft,
true
);
shape.fill = '#e74c3c';
shape.stroke = '#c0392b';
shape.linewidth = 3;
В этом примере каждый угол имеет свой радиус. Метод
makePath строит контур по заданным точкам, а замыкание
контура (true) обеспечивает правильное соединение начальной
и конечной точек.
Two.js позволяет легко анимировать свойства прямоугольников, включая радиус скругления:
let radius = 0;
two.bind('upd ate', function(frameCount) {
radius = 20 + 10 * Math.sin(frameCount * 0.05);
rect.radius = radius;
}).play();
Особенности:
radius может динамически изменяться.bind('update', callback) позволяет обновлять свойства
при каждом кадре анимации.Закругленные прямоугольники можно комбинировать с прозрачностью, градиентной заливкой и трансформациями:
rect.opacity = 0.8;
rect.rotation = Math.PI / 8;
rect.scale = 1.2;
opacity регулирует прозрачность.rotation задает угол поворота в радианах.scale масштабирует фигуру относительно её центра.Закругленные прямоугольники часто используются для визуальных элементов интерфейса. Комбинация заливки, обводки и анимации позволяет создавать кнопки с эффектом наведения:
rect.fill = '#2ecc71';
rect.stroke = '#27ae60';
rect.linewidth = 5;
rect._renderer.elem.addEventListener('mouseover', () => {
rect.fill = '#27ae60';
});
rect._renderer.elem.addEventListener('mouseout', () => {
rect.fill = '#2ecc71';
});
Важно: Two.js напрямую не поддерживает события DOM
для фигур, поэтому используется доступ через _renderer.elem
для подключения обработчиков.
При изменении размеров холста закругленные прямоугольники можно масштабировать пропорционально:
two.renderer.setSize(window.innerWidth, window.innerHeight);
rect.position.se t(window.innerWidth / 2, window.innerHeight / 2);
rect.width = window.innerWidth / 4;
rect.height = window.innerHeight / 6;
Это обеспечивает корректное отображение на экранах разных размеров без потери пропорций углов.
Закругленный прямоугольник в Two.js — это не просто фигура с радиусом, а полноценный объект, поддерживающий:
bind('update'),makePath.Использование этих возможностей позволяет создавать сложные графические интерфейсы и анимации, сохраняя при этом чистоту и гибкость кода.