目前正在开发一个项目,将我们的Goole Maps API从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'按预期工作。当我禁用'click'和'mouseout'时,'mouseover'按预期工作。
为什么这些事件似乎相互联系?在API v2中,我们能够支持此功能没有问题。
提前致谢。
- 编辑 -
这似乎只发生在Firefox和IE中,Chrome会按预期处理事件。
- 编辑 -
我已经开始设置2个地图演示,以便进行并排比较 可以做到。
版本2网址:http://map.ownij.com/index2.php
版本3网址:http://map.ownij.com/
版本2 甚至 Firefox,IE,Chrome 中的监听器行为:
版本3 事件监听器行为:
版本3 甚至 Chrome 中的监听器行为:
正如您所看到的,v3事件行为在chrome中按预期工作,但在 FF和IE,每个事件触发多个侦听器,从而导致 异常的行为。
我们制作了地图,以便显示地图气泡 当用户将鼠标悬停在标记上时,鼠标悬停时会触发 mouseout事件,气泡无限期地重新渲染,直到用户 将鼠标从标记上移开。
在此问题得到解决之前,我们无法发布v3升级版, 否则我们会剥夺客户当前的功能。
- 编辑 -
更新了代码,通过将警报更改为console.log()调用,事件按预期触发。对于非infowindow调用(警报,ebubble等),似乎存在一些不寻常的事件处理。
答案 0 :(得分:1)
这些额外事件可能是由alert
引起的。尝试以不与鼠标交互的方式记录事件,例如使用console.log
(不确定现在是否可以在Internet爆炸中使用)。
简单地说,我的猜测是弹出窗口会导致鼠标“鼠标移开”(并且“鼠标悬停”弹出窗口)。等等,当弹出窗口再次消失时,可能会引起其他事件。
答案 1 :(得分:1)
结束只是取消了悬停监听器并使用点击监听器。最终会想要添加悬停功能,但现在没有时间跟踪它。