Two.js — это легковесная библиотека для работы с векторной графикой в браузере на языке JavaScript. Она поддерживает три основных рендерера: SVG, Canvas и WebGL, что позволяет гибко выбирать подходящий способ отрисовки в зависимости от задач и производительности.
Самый быстрый способ начать работу с Two.js — подключить библиотеку
через CDN. Для этого в HTML-документе достаточно добавить тег
<script> с ссылкой на актуальную версию:
<script src="https://cdnjs.cloudflare.com/ajax/libs/two.js/0.7.0/two.min.js"></script>
После этого объект Two становится доступен в глобальной
области видимости, и можно создавать инстансы сцены и добавлять
объекты.
Преимущества CDN-подключения:
Недостатки:
Для более крупного проекта и удобного управления зависимостями лучше использовать npm. Установка выполняется командой:
npm install two.js
После установки библиотеку можно импортировать в проект:
import Two from 'two.js';
Для CommonJS-проектов используется синтаксис
require:
const Two = require('two.js');
Использование npm позволяет:
Two.js рендерит графику внутри HTML-элемента (контейнера). Для этого
создаётся DOM-элемент, обычно <div>, в который будет
добавлен canvas, SVG или WebGL-контекст. Пример:
<div id="draw-area"></div>
const elem = document.getElementById('draw-area');
const two = new Two({
width: 800,
height: 600,
type: Two.Types.canvas, // SVG, WebGL также доступны
}).appendTo(elem);
Основные параметры конструктора
Two:
width и height — размеры области
рисования.type — тип рендерера (Two.Types.svg,
Two.Types.canvas, Two.Types.webgl).autostart — автоматический запуск анимации при создании
(по умолчанию true).Two.js не требует полного контроля над DOM. Можно добавлять графику в любой существующий контейнер и комбинировать с другими элементами страницы. Например, можно создать интерфейс с кнопками и формами, а Two.js использовать только для анимации графических объектов:
<div id="ui-panel">
<button id="add-circle">Добавить круг</button>
</div>
<div id="canvas-container"></div>
const container = document.getElementById('canvas-container');
const two = new Two({ width: 500, height: 400 }).appendTo(container);
document.getElementById('add-circle').addEventListener('click', () => {
const circle = two.makeCircle(250, 200, 50);
circle.fill = '#FF0000';
circle.stroke = '#000000';
circle.linewidth = 2;
two.update();
});
Для проектов с использованием Webpack или Vite важно корректно настроить импорт Two.js. В современных проектах ES-модули предпочтительнее:
import Two from 'two.js';
Если используется TypeScript, можно установить типы через пакет
@types/two.js (если доступен) или создать собственные
декларации типов, чтобы избежать ошибок компиляции.
Two.js предоставляет возможность автоматически запускать анимацию
через опцию autostart или вручную управлять циклом
обновления:
const two = new Two({ width: 400, height: 300, autostart: false }).appendTo(container);
// Рисуем объект
const rect = two.makeRectangle(200, 150, 100, 50);
rect.fill = 'blue';
// Запускаем анимацию вручную
two.play();
Такой подход удобен, когда требуется контролировать время старта анимации или синхронизировать её с другими событиями на странице.
Two.js использует стандарты HTML5 (Canvas, SVG, WebGL) и корректно работает в современных браузерах: Chrome, Firefox, Safari, Edge. Для старых версий Internet Explorer поддержка ограничена, особенно для WebGL. В production-проектах рекомендуется проверять доступность выбранного рендерера перед использованием:
const renderer = Two.Types.webgl;
if (Two.Utils.isWebGLAvailable() && renderer === Two.Types.webgl) {
// Использовать WebGL
} else {
// fallback на Canvas или SVG
}
Two.js позволяет динамически менять размеры области рисования, что важно для адаптивных интерфейсов:
function resize() {
two.width = window.innerWidth;
two.height = window.innerHeight;
two.update();
}
window.addEventListener('resize', resize);
Такой подход гарантирует корректное отображение графики на любых экранах, включая мобильные устройства и планшеты.
Каждый метод позволяет создавать полноценные сцены, добавлять фигуры, линии, текст, анимацию и управлять рендерером.