2012-06-05 4 views
1

Есть ли способ обнаружить события мыши (наведите указатель мыши, ...) на элементы, которые находятся за другими элементами HTML, но не находится на одном и том же пути DOM (т.е. события не перетекают в элемент)?обнаружение mouseover/mouseclick независимо от уровня z-порядка/уровня

Быстрый пример пояснить, что я имею в виду: http://jsfiddle.net/xeJyg/1/

На данный момент я не вижу другого варианта для регистрации обработчика событий на первом общего родителя, за исключением (в приведенном выше примере это будет <BODY>) и проверьте себя, произошло ли событие над рассматриваемым элементом. Проблема в том, что со многими элементами это, вероятно, станет очень неэффективным.

В конце концов я пытаюсь поймать события мыши для маркеров на нескольких уровнях OpenLayer, которые не поддерживаются из коробки (события работают только для верхнего слоя).

+1

Я думаю, что http://stackoverflow.com/questions/1737480/passing-mouse-clicks-through-an-overlaying -element-div может дать вам начало. – verisimilitude

+0

Спасибо, но это близко к моему упомянутому неэффективному методу do-it-yourself, и мне не очень нравится скрывать/показывать несколько слоев, содержащих несколько сотен маркеров на mousemove ...: -/ –

ответ

3

на новый браузер вы можете использовать pointer-events: none;

#cover { 
    ... 
    pointer-events: none; 
} 

скрипку: http://jsfiddle.net/PVxbq/

+0

Это все равно только позволит мне для получения событий на одном уровне. Тем не менее, у меня есть несколько слоев с маркерами, и мне нужно поймать события для всех слоев/событий. –

+0

На самом деле это был действительно важный намек. Оказалось, что только слои OpenLayers * Vector * блокировали события мыши и устанавливали «указатели-события: нет» для этих слоев, решает проблему (поскольку мне нужны только события мыши на маркерах, а не в векторах). +1 для решения моей основной проблемы. Я разрешаю исходный вопрос, так как он еще не решен. –

+0

Shoulda предположил, что это не сработает на IE9, когда вы сказали «новый браузер»; Boo для IE :( –

Смежные вопросы