В Paper.js приложение строится вокруг объекта
PaperScope, который инкапсулирует все данные
проекта: холсты (Canvas), слои (Layer),
объекты (Item) и обработчики событий. Каждый
PaperScope позволяет создавать независимые области работы,
что особенно полезно для сложных проектов с несколькими интерактивными
сценами. Основные элементы архитектуры:
PaperScope может содержать несколько проектов, но
обычно используется один основной проект.Path, Shape, Raster,
Group), поддерживающий методы трансформации, стиля и
иерархического вложения.onMouseDown,
onMouseDrag, onKeyDown и т. д.Эта структура позволяет изолировать данные и логику, обеспечивая гибкость при работе с несколькими холстами и сложными анимациями.
Каждый Project содержит массив слоёв,
где порядок элементов определяет порядок отрисовки. Основные методы
управления:
var layer = new Layer();
layer.addChild(new Path.Circle(new Point(50, 50), 30));
layer.bringToFront(); // переместить слой на верхний уровень
layer.sendToBack(); // переместить слой на нижний уровень
Group, что позволяет применять трансформации
к группе, сохраняя локальные координаты элементов.Item
поддерживает position, rotation,
scale, skew, позволяя строить сложные
композиции без изменения глобальной сцены.Paper.js реализует событийную модель на уровне инструментов и объектов:
Tool обрабатывает глобальные события, привязанные к
мыши и клавиатуре.Item может обрабатывать события локально
(onMouseEnter, onMouseLeave,
onClick), что позволяет создавать интерактивные элементы с
минимальной логикой вне объекта.Пример использования инструмента:
var tool = new Tool();
tool.onMouseD own = function(event) {
var circle = new Path.Circle({
center: event.point,
radius: 20,
fillColor: 'red'
});
};
Paper.js использует циклический рендеринг через
onFrame события, что обеспечивает плавную анимацию
независимо от браузера:
var circle = new Path.Circle(new Point(50, 50), 20);
circle.fillColor = 'blue';
function onFrame(event) {
circle.position.x += 2;
if(circle.position.x > view.size.width) {
circle.position.x = 0;
}
}
event.delta позволяет рассчитывать смещения относительно
времени между кадрами.Для крупных проектов Paper.js рекомендует модульную структуру:
ShapeFactory, AnimationManager) в отдельном
файле.item.remove()) после завершения их использования для
поддержания высокой производительности.Эта архитектура обеспечивает возможность создавать интерактивные, анимационные и модульные приложения, где логика, визуальные элементы и обработка событий чётко разделены.