qmax
@qmax
программер

Как перехватить мышиные события в перекрытом элементе?

Есть элемент canvas, которому нужны события типа mousemove/down/up/out/click/dblclick (если поднапрячься, можно сократить до move/up/out)
Но поверх него расположены всякие другие элементы, которым тоже нужен, как минимум, клик.
Всё, естественно, absolute/relative positioned.
Весь html поверх канваса - достаточно рандомный (не особо контролируемый со стороны меня как автора модуля).

Вопрос - как обработать события, которые попадают на элементы поверх канваса и ими "съедаются"?

Технология реализации - angular. Тоесть я ваяю директивы, которые сосуществуют с "пользовательским" кодом, который я не контролирую, но на который могу наложить какие-то условия - например, звернуть его в обёрточный элемент с моей директивой.

Но суть проблемы - в непонимании "маршрутизации" ивентов.

P.S. примерный сетап: https://embed.plnkr.co/lKHjED/
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Заверните html, который "съедает" события, в директиву, которая будет слушать эти события и вызывать сервис, который будет предоставлять возможность подписаться на них.

Типа
<proxy-events on="['click', 'mousemove', 'touchstart']" id="eventGroup1">
  ...
</proxy-events>


Это в директиве canvas
EventProxy.subscribe('eventGroup1', function(eventType, event) {
  console.log(eventType, event);
});


С помощью angular-tiny-eventemitter задача элементарная
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы