目前正在研究将我们的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”发出警报。
当我单击一个标记时,它会提示“单击”,然后是“鼠标移出”,然后是“单击”,然后是“鼠标悬停”。我希望它只是提醒“点击”。
当我禁用“mouseover”和“mouseout”时,“click”将按预期工作。当我禁用“单击”和“鼠标移出”时,“鼠标悬停”将按预期工作。
这些事件似乎相互联系起来有什么原因吗?在API v2中,我们能够支持该功能没有问题。
提前致谢。
- 编辑 -
这似乎仅在Firefox和IE中发生,Chrome会按预期处理事件。
- 编辑 -
我已经进行并设置了2个 map 演示,以便进行并排比较
可以做到。
第2版网址:http://map.ownij.com/index2.php
第3版网址:http://map.ownij.com/
版本2 甚至是中的听众行为Firefox,IE,Chrome :
版本3 在中的事件监听器行为Firefox,IE :
版本3 甚至中的听众行为Chrome Chrome :
如您所见,v3事件行为在chrome中按预期工作,但在
FF和IE,每个事件都会触发多个监听器,从而导致
异常行为。
我们构建了 map ,以允许出现 map 气泡
当用户将鼠标悬停在标记上时,则当鼠标悬停时触发
mouseout事件后,气泡将无限期重新渲染,直到用户
将鼠标移出标记。
在解决此问题之前,我们无法发布v3升级,
否则,我们会抢夺客户当前的功能。
- 编辑 -
通过将警报更改为console.log()调用来更新代码,从而按预期触发事件。对于非信息窗口调用(警报,气泡等),似乎存在一些异常事件处理。
最佳答案
这些其他事件可能是由alert
引起的。尝试以不与鼠标交互的方式记录事件,例如,使用console.log
(但不确定Internet爆炸程序中现在是否可用)。
简而言之,我的猜测是该弹出窗口会导致鼠标“鼠标悬停”(和“鼠标悬停”弹出窗口)。等等。然后,当弹出窗口再次消失时,可能会导致其他事件。