В Paper.js каждый элемент сцены (Item) может реагировать на события,
такие как клики мыши, движение курсора и перетаскивание. Одним из самых
часто используемых событий является onClick. Оно позволяет
связать определённое поведение с щелчком на объекте.
var circle = new Path.Circle({
center: [100, 100],
radius: 50,
fillColor: 'red'
});
circle.onCl ick = function(event) {
this.fillColor = 'blue';
};
В этом примере при клике на круг его цвет изменяется с красного на
синий. Объект event содержит информацию о событии:
координаты клика, нажатые клавиши модификаторы и другие параметры.
События в Paper.js имеют определённую структуру и предоставляют полезные свойства:
Point).MouseEvent или TouchEvent).shift, ctrl, alt,
meta).Пример использования модификаторов:
circle.onCl ick = function(event) {
if (event.modifiers.shift) {
this.fillColor = 'green';
} else {
this.fillColor = 'orange';
}
};
Помимо onClick, объекты Paper.js поддерживают множество
событий, позволяющих создавать интерактивные графические элементы:
Пример перетаскивания круга:
circle.onMouseD rag = function(event) {
this.position += event.delta;
};
event.delta содержит смещение курсора между предыдущим и
текущим кадром, что позволяет плавно перемещать объект.
События можно назначать не только на отдельные объекты, но и на
Paper.view для глобальной обработки мыши:
view.onCl ick = function(event) {
console.log('Клик по канве в точке:', event.point);
};
Отличие заключается в том, что view.onClick реагирует на
клики в области всего холста, тогда как item.onClick
реагирует только при попадании клика по конкретному объекту.
Если объекты перекрываются, Paper.js проверяет события сверху вниз по
визуальному слою (item.zOrder). Клик срабатывает на верхнем
объекте. Для изменения этого поведения используется свойство
item.hitTestable:
circle.hitTestable = false;
Теперь клики проходят сквозь объект и могут быть перехвачены нижележащими элементами.
Для реализации различных реакций на одинарный и двойной клик
применяется свойство event.count:
circle.onCl ick = function(event) {
if (event.count === 2) {
this.remove();
} else {
this.fillColor = 'yellow';
}
};
В этом примере одинарный клик меняет цвет объекта, а двойной клик удаляет его.
hitTestable для
управления тем, какие объекты должны реагировать на клики.onMouseEnter и
onMouseLeave удобно применять для визуальной подсветки
объектов при наведении.event.delta для плавного
перемещения объектов или анимаций при перетаскивании.item.onClick — основной инструмент для реагирования на
клики по объекту.event, содержащему
координаты, модификаторы и количество кликов.hitTestable и порядок слоёв.Использование этих механизмов позволяет создавать сложные интерактивные сцены, анимации и игры, управляемые действиями пользователя напрямую на объектах Paper.js.