В PixiJS управление курсором осуществляется через
свойства interaction объектов и контейнеров. Каждый объект,
наследующийся от PIXI.DisplayObject, может реагировать на
события мыши и менять визуальное отображение курсора.
Чтобы объект мог реагировать на курсор, необходимо задать свойство:
sprite.interactive = true;
Без установки interactive = true события мыши, такие как
pointerover или pointerdown, работать не
будут.
Также часто используют buttonMode, чтобы визуально
обозначить объект как интерактивный:
sprite.buttonMode = true;
Свойство buttonMode изменяет курсор на стандартный
“руку” (pointer), когда курсор находится над объектом.
По умолчанию PixiJS использует системный курсор браузера. Для
кастомизации курсора применяется свойство cursor
объекта:
sprite.cursor = 'pointer'; // стандартная "рука"
sprite.cursor = 'crosshair'; // прицел
sprite.cursor = 'wait'; // индикатор ожидания
Допустимые значения соответствуют CSS-свойствам cursor.
Можно использовать любые поддерживаемые браузером стили курсора:
default – стрелкаpointer – рукаcrosshair – прицелtext – текстовый курсорmove – перемещениеwait – ожиданиеPixiJS поддерживает собственные изображения курсоров через указание URL:
sprite.cursor = 'url(myCursor.png), auto';
Важно учитывать: размер изображения не должен превышать 128x128 пикселей для корректного отображения во всех браузерах.
Для динамической смены курсора при наведении можно использовать обработчики событий:
sprite
.on('pointerover', () => { sprite.cursor = 'url(hoverCursor.png), auto'; })
.on('pointerout', () => { sprite.cursor = 'default'; });
Для изменения курсора на всей сцене можно использовать
renderer.view.style.cursor:
app.renderer.view.style.cursor = 'crosshair';
Этот способ эффективен для случаев, когда требуется сменить курсор вне конкретного интерактивного объекта.
PixiJS использует pointer-события, которые объединяют мышь, сенсорные экраны и стилусы. Основные события:
pointerover – курсор наведен на объектpointerout – курсор ушёл с объектаpointerdown – нажатие кнопки мыши или касаниеpointerup – отпускание кнопки мыши или касаниеpointermove – движение указателя над объектомПример обработки событий для изменения курсора:
sprite.on('pointerover', () => {
sprite.cursor = 'move';
});
sprite.on('pointerout', () => {
sprite.cursor = 'default';
});
Курсор можно динамически менять в зависимости от состояния анимации или перемещаемых объектов. Например, при перетаскивании спрайта:
sprite
.on('pointerdown', (event) => {
sprite.data = event.data;
sprite.dragging = true;
sprite.cursor = 'grabbing';
})
.on('pointerup', () => {
sprite.dragging = false;
sprite.data = null;
sprite.cursor = 'pointer';
})
.on('pointermove', () => {
if (sprite.dragging) {
const newPosition = sprite.data.getLocalPosition(sprite.parent);
sprite.position.x = newPosition.x;
sprite.position.y = newPosition.y;
}
});
Здесь курсор меняется на "grabbing" при захвате объекта
и возвращается к "pointer" после отпускания.
Если объект вложен в контейнер, интерактивность можно настроить на уровне контейнера:
container.interactiveChildren = true;
Это позволяет автоматически обрабатывать pointer-события для всех
дочерних объектов. Курсор объектов внутри контейнера будет корректно
менять стиль при наведении, если у дочерних объектов задан
interactive = true.
buttonMode вместе с
cursor = 'pointer' для кнопок.auto или default)."grabbing"
повышает UX.Эти инструменты позволяют гибко управлять поведением и визуальным отображением курсора в PixiJS, создавая интуитивные и динамичные интерфейсы для игр и приложений.