Google Maps Api V3 - 为同一标记对象分配多个侦听器

时间:2011-12-06 01:35:33

标签: javascript google-maps google-maps-api-3

目前正在开发一个项目,将我们的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 中的监听器行为:

  • mouseover:mouseover
  • 点击:点击
  • mouseout:mouseout
Firefox,IE 中的

版本3 事件监听器行为:

  • mouseover:mouseout,mouseover,mouseover
  • 点击:点击,鼠标移开,点击
  • mouseout:mouseout,mouseout

版本3 甚至 Chrome 中的监听器行为:

  • mouseover:mouseover
  • 点击:点击
  • mouseout:mouseout

正如您所看到的,v3事件行为在chrome中按预期工作,但在 FF和IE,每个事件触发多个侦听器,从而导致 异常的行为。

我们制作了地图,以便显示地图气泡 当用户将鼠标悬停在标记上时,鼠标悬停时会触发 mouseout事件,气泡无限期地重新渲染,直到用户 将鼠标从标记上移开。

在此问题得到解决之前,我们无法发布v3升级版, 否则我们会剥夺客户当前的功能。

- 编辑 -

更新了代码,通过将警报更改为console.log()调用,事件按预期触发。对于非infowindow调用(警报,ebubble等),似乎存在一些不寻常的事件处理。

2 个答案:

答案 0 :(得分:1)

这些额外事件可能是由alert引起的。尝试以不与鼠标交互的方式记录事件,例如使用console.log(不确定现在是否可以在Internet爆炸中使用)。

简单地说,我的猜测是弹出窗口会导致鼠标“鼠标移开”(并且“鼠标悬停”弹出窗口)。等等,当弹出窗口再次消失时,可能会引起其他事件。

答案 1 :(得分:1)

结束只是取消了悬停监听器并使用点击监听器。最终会想要添加悬停功能,但现在没有时间跟踪它。