Наведение мыши над Infobox вызывает событие зависания на маркерах, которые находятся за ним
В настоящее время я использую плагин InfoBox для Google Maps. К сожалению, я столкнулся с досадной проблемой.
Пользователи в моем приложении могут открыть InfoBox, наведя курсор на соответствующий маркер. Это отлично работает. Проблема возникает, когда InfoBox открыт и пользователь наводит на него курсор. По какой-то причине маркеры под InfoBox запускают события наведения мыши. Это большая проблема, потому что он закрывает текущее окно перед тем, как открыть поле, принадлежащее маркеру, который только что запустил событие мыши. Я провел поиск и обнаружил, что для каждого маркера установлено следующее:
optimized: false
предотвращает эту ошибку Однако эта опция замедляет работу карты и делает ее неудобной в использовании.
Мой инфобокс:
infoWindows[obj.VehicleName] = new InfoBox({
content: contentString,
disableAutoPan: false,
maxWidth: 500,
pixelOffset: new google.maps.Size(-250, -490),
boxStyle: {
width: "500px"
},
enableEventPropagation: false,
infoBoxClearance: new google.maps.Size(45, 1)
});
Мой слушатель:
google.maps.event.addListener(marker, 'mouseover', function() {
1 ответ
Ужасное исправление, потому что ни один из объявленных вариантов (enableEventPropagation), казалось, не работал для меня (и я, конечно, не хотел идти по пути использования "optimized:false" на 300+ маркерах)
Внутри слушателя при наведении курсора на каждый маркер я проверяю, находится ли текущее открытое окно InfoWindow над:
google.maps.event.addListener(marker, 'mouseover', function() {
//If an InfoBox is currently open
if(openInfoBox !== null){
var id = $(openInfoBox.getContent()).attr('id');
//If the main div inside that InfoBox is currently being hovered over
if ($('#' + id + ':hover').length) {
return false; //go no further. i.e. ignore mouseover event for marker
}
}
//Open InfoBox etc etc