В PixiJS взаимодействие с графическими объектами построено на
событийной модели. Каждый DisplayObject может обрабатывать
события мыши, касаний и курсора. Для управления этим поведением
используется свойство eventMode, которое определяет, как
объект реагирует на события и как они распространяются по сцене.
Свойство eventMode имеет несколько ключевых значений:
none, passive, auto,
static, dynamic. Понимание различий
между ними критично для оптимизации производительности и корректной
обработки взаимодействий.
eventMode = noneЗначение none отключает обработку событий для объекта
полностью.
Характеристики:
eventMode.Применение:
const sprite = new PIXI.Sprite(texture);
sprite.eventMode = 'none'; // Отключение интерактивности
eventMode = passiveРежим passive делает объект интерактивным, но не
позволяет изменять состояние событий, таких как
preventDefault() для браузерных событий.
Характеристики:
preventDefault().Применение:
sprite.eventMode = 'passive';
sprite.on('pointerdown', () => {
console.log('Sprite clicked');
});
eventMode = autoЗначение auto устанавливает интерактивность на объекте
автоматически на основе текущего состояния:
Характеристики:
none.Применение:
sprite.eventMode = 'auto';
sprite.on('pointerover', () => console.log('Hovered'));
eventMode = staticРежим static фиксирует интерактивность объекта
независимо от текущих обработчиков.
Характеристики:
Применение:
sprite.eventMode = 'static';
eventMode = dynamicРежим dynamic обеспечивает максимальную гибкость
и адаптивность в обработке событий:
Характеристики:
Применение:
sprite.eventMode = 'dynamic';
sprite.on('pointerdown', () => console.log('Dynamic click'));
sprite.off('pointerdown'); // можно удалять обработчик без отключения интерактивности
| Режим | Интерактивность | Можно блокировать событие | Ресурсоёмкость | Применение |
|---|---|---|---|---|
| none | нет | нет | низкая | Визуальные объекты без интерактивности |
| passive | да | нет | низкая | Клики и наведение без вмешательства в поведение браузера |
| auto | зависит от обработчиков | зависит от обработчиков | средняя | Динамически создаваемые объекты |
| static | всегда да | да | средняя | Фиксированные интерактивные элементы |
| dynamic | всегда да | да | выше среднего | Игровые сцены и динамические интерфейсы |
none или passive.static.dynamic.auto подходит для упрощённого управления, когда не
хочется вручную следить за интерактивностью каждого объекта.Эффективное управление eventMode позволяет
оптимизировать производительность сцен PixiJS, особенно при большом
количестве спрайтов и сложных взаимодействиях.