В настоящее время мы работаем над проектом по обновлению нашего 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 () события запускаются, как и ожидалось. Похоже, что есть некоторая необычная обработка событий в отношении вызовов, не являющихся окнами (оповещения, отлив и т. Д.).