Наведение мыши над 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
Другие вопросы по тегам