У меня есть карта, которая имеет google.maps.event.addListener
, установленную на объекте map
, для click
событий для размещения маркера на карте. Теперь я хочу добавить контекстное меню к маркерам, поэтому создаю пользовательский оверлей в floatPane
. Снова google.maps.event.addListener
используется для добавления события rightclick
для каждого маркера в положение и отображение меню.Приоритет прослушивания событий API Карт Google
После того, как отображается меню, я хочу, чтобы он очищался либо с помощью выбранного пункта меню, либо с нажатием кнопки перехода, либо на карте.
меню имеет div
для каждой детали с помощью JQuery .on
прикрепить click
обработчик к ним, в то время, когда отображается меню из keydown
Обработчика прикрепляется к document
.on
, используя для проверки побега нажат. Они работают по желанию, но я не могу найти удовлетворительное решение для обнаружения щелчка на карте.
Если я использую google.maps.event.addListener
на map
объекта, чтобы отменить меню он работает, но и регистрирует со слушателем, чтобы добавить маркер и event.stopPropagation()
не влияет на это. i.e. Отмена меню также добавляет маркер. Я считаю, что API Google запускает обработчики в том порядке, в котором они были добавлены, и не имеет возможности изменить приоритет.
Я также пробовал использовать обработчик jQuery .on
на div
, к которому прилагается карта. Но если я использую событие click
или mouseup
, он запускается щелчком правой кнопки мыши, который добавляет меню. т. Е. Меню мигает на экране по мере его появления, но сразу же закрывается. Событие mousedown
избегает этой проблемы, но, очевидно, все же вызывает обработчик API Google для добавления маркера. Он также регистрирует щелчок, чтобы перетащить карту, чтобы прокрутить ее, что API Google не делает и будет предпочтительным.
Так что мне кажется, что есть только два решения этой проблемы.
Можно было бы отменить любые обработчики на карте при отображении меню, а затем повторно добавить их после его закрытия. Это кажется излишне чрезмерным, хотя.
Другой способ заключается в том, чтобы обернуть содержимое обработчиков в условном выражении, чтобы определить, открыто ли меню. Это может быть либо с использованием глобальной переменной в качестве флага, либо с добавлением свойства статуса к объекту меню.
Но это сделало бы код менее многоразовым и противоречил бы наличию отдельных обработчиков событий. Я также могу просто поместить код, чтобы закрыть меню в исходном обработчике.
Есть ли что-нибудь, что мне не хватает? Похоже, что это не слишком сложно, но неспособность установить приоритет обработчиков в Google API означает либо необходимость кодировать обработчики друг вокруг друга.
Попробуйте разместить немного своего кода или создать полурабочую [jsfiddle] (http://jsfiddle.net), чтобы мы могли лучше помочь вам. –