Google Maps Api V3 - Назначение нескольких слушателей одному и тому же маркерному объекту - PullRequest
5 голосов
/ 06 декабря 2011

В настоящее время мы работаем над проектом по обновлению нашего API Карт Goole с версии v2 до v3, столкнулись с проблемой и нуждаемся в подтверждении возможности регистрации нескольких слушателей для одного маркера. Кто-нибудь может подтвердить, поддерживает ли Goole Maps API v3 несколько слушателей на одном маркере, как API v2 может?

Пример кода:

var mapObject = document.getElementById('map_canvas');
var points = new Array();
var markers = new Array();

var mapOptions = {
    zoom: 16,
    center: new google.maps.LatLng(33.260081, -117.279369),
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    streetViewControl: false,
    draggable: true,
    scaleControl: false,
    zoomControl: true,                  
    panControl: true,                    
    scrollwheel: false,
    disableDoubleClickZoom: false,
    navigationControlOptions: {
    style: google.maps.NavigationControlStyle.ZOOM_PAN
}

map = new google.maps.Map(mapObject, mapOptions);

points.push(lat:'33.260081', lng:'-117.279369');
points.push(lat:'33.260079', lng:'-117.279371');
points.push(lat:'33.260083', lng:'-117.279373');

for (var i in points) {

    var point = points[i];

    var marker = initMarker(point);

    markers.push(marker);

    google.maps.event.addListener(marker, 'mouseover', function() {
        alert('mouseover');
    });

    google.maps.event.addListener(marker, 'click', function() {
        alert('click');
    });

    google.maps.event.addListener(marker, 'mouseout', function() {
        alert('mouseout');
    });

    bounds.extend(new google.maps.LatLng(point.lat, point.lng));
}

Когда я наводю курсор на маркер, он предупреждает «mouseout», затем «mouseover» дважды. Я ожидал бы, что он просто предупредит вас при наведении мыши.

Когда я нажимаю на маркер, он предупреждает «щелчком», затем «мышью», затем «щелчком», а затем «наведением мыши». Я ожидал бы, что это просто предупредит 'щелчок'.

Когда я отключаю mouseover и mouseout, щелчок работает как положено. И когда я отключаю «click» и «mouseout», «mouseover» работает как положено.

Есть ли какая-то причина, по которой эти события, кажется, связаны друг с другом? В API v2 мы смогли поддерживать эту функциональность без проблем.

Заранее спасибо.

- Правка -

Похоже, что это происходит только в Firefox и IE, Chrome обрабатывает события, как ожидалось.

- Правка -

Я пошел вперед и настроил 2 демо-карты, чтобы провести параллельное сравнение можно сделать.

Версия 2 URL: http://map.ownij.com/index2.php

Версия 3 URL: http://map.ownij.com/

Версия 2 даже поведение слушателя в Firefox, IE, Chrome :

  • mouseover: mouseover
  • клик: клик
  • mouseout: mouseout

Версия 3 Поведение прослушивателя событий в Firefox, IE :

  • mouseover: mouseout, mouseover, mouseover
  • клик: клик, мышка, клик
  • mouseout: mouseout, mouseout

Версия 3 даже поведение слушателя в Chrome :

  • mouseover: mouseover
  • клик: клик
  • mouseout: mouseout

Как вы можете видеть, поведение событий v3 работает как и ожидалось в chrome, но в FF и IE, каждое событие запускает несколько слушателей, что приводит к необычное поведение

Мы построили наши карты, чтобы появился пузырь карты когда пользователь наводит курсор на маркер, поэтому при наведении курсора событие mouseout, пузырь перерисовывается бесконечно, пока пользователь убирает мышь с маркера.

Мы не можем выпустить наше обновление v3, пока это не будет решено, в противном случае мы лишаем наших клиентов текущей функциональности.

- Правка -

Обновлен код, при изменении оповещений на вызовы console.log () события запускаются, как и ожидалось. Похоже, что есть некоторая необычная обработка событий в отношении вызовов, не являющихся окнами (оповещения, отлив и т. Д.).

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Закончилось только тем, что покончил со слушателем при наведении курсора и пошел со слушателем щелчка. В конечном счете, хотелось бы добавить функциональность наведения, но у вас нет времени, чтобы отследить это сейчас.

1 голос
/ 08 декабря 2011

Возможно, эти дополнительные события вызваны alert. Попробуйте регистрировать события так, чтобы они не взаимодействовали с мышью, например, с помощью console.log (хотя не уверен, что теперь это доступно в Internet Explorer).

Проще говоря, я предполагаю, что всплывающее окно заставляет вашу мышь "mouseout" (и "mouseover" всплывающее окно). и т. д. дополнительные события могут быть вызваны тем, что всплывающее окно снова исчезает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...