В PixiJS работа с интерактивными объектами основана на системе
событий указателя. Основными событиями являются
pointerdown,
pointerup и
pointermove. Они предоставляют гибкий
способ реагирования на действия пользователя, такие как нажатия,
отпускания и перемещения мыши или касания на сенсорных устройствах.
Любой объект в PixiJS по умолчанию не интерактивен. Для того чтобы он начал реагировать на события указателя, необходимо установить свойство:
sprite.interactive = true;
sprite.buttonMode = true; // отображение курсора как указателя
interactive — включает обработку событий.buttonMode — изменяет курсор на указатель при наведении
(опционально, для UX).pointerdownСрабатывает при начале взаимодействия с объектом (нажатие мыши или касание).
sprite.on('pointerdown', (event) => {
console.log('Нажатие на объект', event.data.global);
});
event.data.global возвращает координаты указателя
относительно всей сцены.
Можно использовать
event.data.getLocalPosition(sprite) для получения координат
относительно объекта.
Позволяет реализовать:
pointerupСрабатывает при отпускании кнопки мыши или окончания касания.
sprite.on('pointerup', (event) => {
console.log('Отпускание на объекте', event.data.global);
});
Различие с pointerupoutside:
pointerupoutside срабатывает, если указатель отпускают
вне границ объекта, что полезно для отслеживания отмены
действий.
Используется для:
pointermoveОтслеживает перемещение указателя над объектом, работает только если объект интерактивен.
sprite.on('pointermove', (event) => {
const position = event.data.global;
console.log('Перемещение указателя', position.x, position.y);
});
pointerdown позволяет реализовать
drag-and-drop:sprite.on('pointerdown', (event) => {
sprite.data = event.data;
sprite.dragging = true;
});
sprite.on('pointerup', () => {
sprite.dragging = false;
sprite.data = null;
});
sprite.on('pointermove', () => {
if (sprite.dragging) {
const newPosition = sprite.data.getLocalPosition(sprite.parent);
sprite.x = newPosition.x;
sprite.y = newPosition.y;
}
});
pointermove полезно для динамических эффектов:
PixiJS использует события указателя, которые объединяют:
mousedown, mouseup,
mousemove),touchstart, touchend,
touchmove),Это позволяет писать единый обработчик для разных типов ввода без дублирования кода.
PixiJS поддерживает механизм всплытия
(event.stopPropagation()) и поглощения
событий:
sprite.on('pointerdown', (event) => {
console.log('Нажатие на объект');
event.stopPropagation(); // предотвращает передачу события родителям
});
interactiveChildren = false у контейнеров
ограничивает обработку событий только самим контейнером.pointerdown, pointermove и
pointerup.pointerdown или
pointerup, в зависимости от UX предпочтений.sprite.data = null), чтобы избежать утечек памяти и багов
с drag-and-drop.event.data.getLocalPosition()
для точного позиционирования объектов относительно контейнеров.Эти три события (pointerdown, pointerup,
pointermove) являются основой интерактивности в PixiJS.
Правильное их использование позволяет создавать сложные интерфейсы, игры
и визуальные приложения с поддержкой любых типов ввода.