В Paper.js события onMouseEnter и
onMouseLeave предназначены для отслеживания момента, когда
указатель мыши входит на область объекта или
покидает её. Они тесно связаны с объектами типа
Path, Shape, Raster,
Group и другими элементами, которые могут быть отображены
на Canvas. Эти события позволяют создавать интерактивные
элементы с визуальной реакцией на наведение мыши.
Path с
closed: false) пересечение определяется только по линии
контура, поэтому вход/выход будет срабатывать, только если курсор
находится точно над линией.Пример типичной структуры обработчиков:
var circle = new Path.Circle({
center: [150, 150],
radius: 50,
fillColor: 'red'
});
circle.onMouseEn ter = function(event) {
this.fillColor = 'green';
};
circle.onMouseLe ave = function(event) {
this.fillColor = 'red';
};
В этом примере цвет круга меняется на зелёный при наведении и возвращается к красному при уходе мыши.
Внутри обработчика this всегда ссылается на объект, к
которому привязан обработчик. Это удобно для изменения свойств объекта,
таких как:
fillColor и strokeColor — изменение цвета
заливки и контураscale() и rotate() — динамическое
изменение размеров и вращениеopacity — управление прозрачностьюПример с анимацией при наведении:
var rect = new Path.Rectangle({
point: [50, 50],
size: [100, 60],
fillColor: 'blue'
});
rect.onMouseEn ter = function() {
this.scale(1.2);
};
rect.onMouseLe ave = function() {
this.scale(1 / 1.2);
};
События onMouseEnter и onMouseLeave могут
быть назначены как отдельным объектам, так и группам
(Group). Если обработчик привязан к группе, событие
срабатывает при входе курсора на любой из дочерних
элементов.
var group = new Group([
new Path.Circle([100, 100], 30),
new Path.Rectangle([150, 150], [60, 40])
]);
group.onMouseEn ter = function() {
this.children.forEach(child => child.fillColor = 'orange');
};
group.onMouseLe ave = function() {
this.children.forEach(child => child.fillColor = 'gray');
};
onMouseEnter,
чтобы создавать более сложные эффекты.z-index (порядок добавления в
проект) для срабатывания событий.hitTest() внутри глобального tool.onMouseMove
вместо прямого назначения событий, чтобы контролировать точное
пересечение.Пример комбинированного подхода:
tool.onMouseM ove = function(event) {
var hitResult = project.hitTest(event.point);
if (hitResult && !hitResult.item.isHovered) {
hitResult.item.isHovered = true;
hitResult.item.onMouseEnter(event);
}
project.activeLayer.children.forEach(function(child) {
if (child.isHovered && child !== hitResult?.item) {
child.isHovered = false;
child.onMouseLeave(event);
}
});
};
Этот подход позволяет гибко управлять событиями для множества объектов без необходимости присваивать каждому отдельные обработчики.
onMouseEnter и onMouseLeave являются
мощными инструментами для создания интерактивных элементов в Paper.js.
Они позволяют:
Эти события идеально подходят для интерфейсных компонентов, игр и визуализации данных, где важно реагировать на перемещение мыши по объектам.