Я думаю о создании простой веб-игры с использованием API <canvas>. Я просмотрел библиотеки JavaScript для элементов GUI, которые отображаются непосредственно на холсте, и нашел некоторые, которые выглядят хорошо, например Zebra, но я бы предпочел придерживаться стандартных элементов управления DOM, созданных поверх холста. Тем не менее, я сталкиваюсь с проблемами с вводом мыши в ловушку с помощью <div> s, которую я использую, чтобы содержать кнопки, текстовые поля и т.д., Которые я хочу использовать.
Рассмотрим следующий образ или перейдите к этой скрипте, чтобы увидеть мой код.
Скриншот http://www.ekardnt.com/capture.PNG
Красный фон - это элемент холста, а синий фон - это div с четырьмя кнопками. И холст, и div имеют "положение: абсолютные" свойства CSS. Я добавил простые вызовы alert() в canvas и div onclick, чтобы показать, какие элементы захватывают ввод.
Я хочу, чтобы canvas 'onclick вызывался всякий раз, когда клик не попадал на кнопку. То есть, если я нажимаю на открытый синий фон контейнера div, я хочу, чтобы событие click "провалилось" на холст. В настоящее время, однако, div onclick вызывается как при нажатии кнопки, так и при нажатии на синюю область - разумное поведение по умолчанию, но неудобное для меня.
Есть ли способ получить поведение, которое я хочу? Я пробовал добавлять pointer-events: none
в стиль div, но затем кнопки вообще не реагируют на ввод.
Добавить pointer-events: none;
в контейнер #buttons
и pointer-events:auto;
к элементам кнопки. Затем щелчок по контейнеру будет "проваливаться", а кнопки остаются функциональными.
#buttons {
/* ... */
pointer-events: none;
}
#buttons button {
pointer-events: auto;
}
pointer-events
в IE11 и использовать JavaScript для перенаправления событий на холсте, используя var event = document.createEvent('MouseEvents');
event.initMouseEvent( ... )
и element.dispatchEvent(event);
,