В Paper.js каждая сцена, отображаемая на холсте, управляется объектом Project. Одним из ключевых элементов структуры проекта является массив Project.layers, который содержит все слои текущего проекта. Слои позволяют структурировать графику, управлять порядком отображения объектов и изолировать отдельные группы элементов для удобного редактирования.
Каждый проект имеет массив слоев:
let layers = project.layers;
console.log(layers.length); // количество слоев в проекте
Первый слой создаётся автоматически при инициализации проекта. Каждый элемент в массиве является объектом Layer, который наследует свойства и методы от Item.
Для доступа к активному слою используется:
let activeLayer = project.activeLayer;
ActiveLayer определяет, в каком слое создаются новые элементы по умолчанию.
Новый слой создаётся через конструктор Layer():
let layer = new Layer();
layer.name = "Foreground";
Добавление слоя в проект происходит автоматически при создании, если не указано иное. Можно управлять порядком слоев с помощью методов массива:
project.addLayer(layer); // добавление слоя в конец массива
project.insertLayer(0, layer); // вставка слоя на первую позицию
Слои в Paper.js отрисовываются сверху вниз. Слой с наибольшим индексом находится выше остальных. Изменение порядка слоев осуществляется с помощью методов:
layer.sendToBack(); // перемещает слой на самый нижний уровень
layer.bringToFront(); // перемещает слой на верхний уровень
layer.insertBelow(otherLayer); // вставляет слой ниже указанного
layer.insertAbove(otherLayer); // вставляет слой выше указанного
Важно: изменение порядка слоев не меняет порядок
объектов внутри слоя. Порядок элементов внутри слоя управляется отдельно
через методы элементов (sendToBack(),
bringToFront() и т.д.).
Слой имеет несколько ключевых свойств:
Пример использования:
let background = new Layer();
background.name = "Background";
background.opacity = 0.5;
background.visible = true;
background.locked = false;
Слой может содержать множество объектов (Path, Shape, Group). Объекты добавляются автоматически в активный слой:
project.activeLayer = background;
let circle = new Path.Circle(new Point(100, 100), 50);
circle.fillColor = 'red';
Для доступа к объектам внутри слоя можно использовать свойство Layer.children:
for (let item of background.children) {
console.log(item.className, item.bounds);
}
Также можно удалять все объекты слоя:
background.removeChildren(); // удаляет все элементы слоя
Для копирования слоя используется метод Layer.clone():
let copyLayer = background.clone();
copyLayer.name = "Background Copy";
Удаление слоя происходит через метод remove():
copyLayer.remove();
При удалении слоя все содержащиеся в нём элементы также удаляются.
Для переключения текущего слоя для создания новых элементов используется:
project.activeLayer = project.layers[1]; // активирует второй слой
После смены активного слоя новые объекты будут автоматически добавляться именно в него.
Эффективное использование Project.layers делает код чистым, упрощает редактирование и позволяет создавать сложные интерактивные графические сцены.