MouseEvent в Paper.js представляет собой объект, который
описывает события мыши на холсте (Canvas). Эти события
включают нажатие кнопки мыши, перемещение курсора и отпускание кнопки.
Работа с MouseEvent является ключевой для создания
интерактивной графики, анимаций и пользовательских интерфейсов.
Paper.js поддерживает несколько типов событий мыши, которые
обрабатываются через объекты Tool:
onMouseDown – вызывается при нажатии
кнопки мыши.onMouseUp – вызывается при отпускании
кнопки мыши.onMouseDrag – вызывается при
перемещении мыши с зажатой кнопкой.onMouseMove – вызывается при
перемещении мыши без зажатой кнопки.Каждое из этих событий передаёт объект MouseEvent с
набором полезных свойств для работы с позицией курсора, целевыми
элементами и клавишами-модификаторами.
point Объект типа
Point, содержащий координаты курсора относительно холста в
момент события.
tool.onMouseD own = function(event) {
console.log(event.point); // Point { x: 100, y: 150 }
};lastPoint Последняя позиция курсора
при предыдущем событии, актуально для onMouseDrag.
tool.onMouseD rag = function(event) {
console.log('Перемещение с', event.lastPoint, 'на', event.point);
};delta Разница между текущей и
предыдущей позицией курсора, используется для вычисления смещений при
перетаскивании объектов.
tool.onMouseD rag = function(event) {
path.position += event.delta;
};count Содержит количество
последовательных кликов мыши. Позволяет различать одиночные и двойные
клики.
tool.onMouseD own = function(event) {
if(event.count === 2) {
console.log('Двойной клик');
}
};modifiers Объект, отображающий
состояние клавиш-модификаторов (shift, ctrl,
alt, meta) во время события.
tool.onMouseD own = function(event) {
if(event.modifiers.shift) {
console.log('Shift нажат');
}
};event Ссылается на нативное событие
JavaScript, что позволяет получить доступ к дополнительным свойствам,
недоступным напрямую через Paper.js.
tool.onMouseD own = function(event) {
console.log(event.event.clientX, event.event.clientY);
};Перетаскивание объектов
var circle = new Path.Circle({
center: [100, 100],
radius: 40,
fillColor: 'red'
});
tool.onMouseD rag = function(event) {
if(circle.contains(event.point)) {
circle.position += event.delta;
}
};
В этом примере delta позволяет перемещать круг по
холсту, сохраняя точку захвата при начале перетаскивания.
Рисование линий и кривых
var path;
tool.onMouseD own = function(event) {
path = new Path();
path.strokeColor = 'black';
path.add(event.point);
};
tool.onMouseD rag = function(event) {
path.add(event.point);
};
tool.onMous eUp = function(event) {
path.simplify();
};
Здесь point фиксирует координаты каждого положения мыши,
формируя непрерывную кривую. Метод simplify() уменьшает
количество точек, делая линию более гладкой.
MouseEvent всегда привязан к конкретному
Tool. Для работы с несколькими инструментами нужно
создавать отдельные объекты Tool с собственными
обработчиками событий.delta всегда актуально только для событий
onMouseDrag. Для других событий оно будет равно
(0, 0).modifiers помогает создавать интерактивные
реакции на сочетания клавиш с мышью, что удобно для сложных графических
редакторов.count позволяет добавлять логику двойного
или тройного клика без необходимости отслеживать таймеры вручную.Объекты Paper.js (Item) могут проверять попадание
курсора через метод contains, что делает
обработку MouseEvent особенно удобной для редактирования
графических элементов. При работе с несколькими слоями
(Layer) события мыши обрабатываются в контексте текущего
Tool, а не глобально для всего проекта.
Сочетание свойств point, delta,
lastPoint, modifiers и count
делает MouseEvent универсальным инструментом для реализации
интерактивных интерфейсов, от простых перетаскиваний до сложных рисующих
приложений.