目前正在开展一个项目,将我们的 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”会按预期工作。当我禁用“点击”和“鼠标悬停”时,“鼠标悬停”会按预期工作。
为什么这些事件似乎相互关联?在 API v2 中,我们能够毫无问题地支持此功能。
提前致谢。
-- 编辑--
这似乎只发生在 Firefox 和 IE 中,Chrome 按预期处理事件。
-- 编辑--
我已经开始设置 2 个 map 演示,以便进行并排比较 可以做到。
版本 2 网址:http://map.ownij.com/index2.php
版本 3 网址:http://map.ownij.com/
版本 2 甚至 Firefox、IE、Chrome 中的监听器行为:
- 鼠标悬停:鼠标悬停
- 点击:点击
- 鼠标悬停:鼠标悬停
- 鼠标悬停:鼠标移出、鼠标悬停、鼠标悬停
- 点击:点击,鼠标移开,点击
- 鼠标移出:鼠标移出,鼠标移出
版本 3 甚至 Chrome 中的监听器行为:
- 鼠标悬停:鼠标悬停
- 点击:点击
- 鼠标悬停:鼠标悬停
如您所见,v3 事件行为在 chrome 中按预期工作,但在 FF 和 IE,每个事件都会触发多个监听器,从而导致 不寻常的行为。
我们构建 map 以允许出现 map 气泡 当用户将鼠标悬停在标记上时,因此当鼠标悬停时触发 mouseout 事件,气泡会无限期地重新呈现,直到用户 将鼠标移离标记。
在解决此问题之前,我们无法发布 v3 升级, 否则我们会剥夺我们客户的当前功能。
-- 编辑--
更新代码,通过将警报更改为 console.log() 调用,事件按预期触发。对于非信息窗口调用(警报、气泡等),似乎存在一些不寻常的事件处理。
最佳答案
可能这些额外的事件是由 alert
引起的。尝试以不与鼠标交互的方式记录事件,例如使用 console.log
(不确定现在是否可以在 internet exploder 中使用)。
简单地说,我的猜测是弹出窗口导致您的鼠标“鼠标移出”(和“鼠标悬停”弹出窗口)。等。当弹出窗口再次消失时,可能会导致其他事件。
关于javascript - Google Maps Api V3 - 将多个监听器分配给同一标记对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394278/