InfoWindow不会立即打开

时间:2014-01-30 15:49:37

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

我在InfoWindows开放时遇到问题。代码调用open函数,但在用户执行其他与地图交互的操作之前,信息窗口不会出现在屏幕上,通常是单击或移动鼠标。

以下是预期的逻辑:单击标记时会打开一个信息窗口。如果已打开信息窗口,则会关闭上一个信息窗口,然后打开新信息窗口。如果单击地图,信息窗口将关闭。

观察到的问题:地图加载。我点击一个标记,出现一个信息窗口。我通过单击信息窗口上的x或单击地图来关闭它。 A)我点击另一个标记。什么都没发生。我再次点击,出现信息窗口。 B)我点击另一个标记。什么都没发生。我再次点击它,出现信息窗口。

无论哪种方式,都需要额外的用户输入才能显示信息窗口。

我还实现了另一种逻辑:在鼠标悬停事件触发标记后显示信息窗口。仅在用户单击地图时关闭,关闭信息窗口或将光标移动到其他标记上。

观察到的行为:与以前一样的问题,除了信息窗口有时仅在光标移出标记后才会出现。

注意:

  • 多边形和标记都会发生这种情况。
  • 仅在Windows中的Google Chrome中观察到了行为。没有其他浏览器经过测试。
  • 此错误已在多台计算机上出现。
  • 如果我使用Chrome的开发者工具,则信息窗口始终显示在断点之后。

以下是代码:

var mCurrentOpenInfoWindow;
var mCurrentInfoWindowParent;

function openNewInfoWindowAtLatLon(parent, anchor, infoWindowData) {
    if (mCurrentInfoWindowParent !== parent) {
        closeCurrentInfoWindow();

        var content = createInfoWindowContent(infoWindowData);
        if (!mCurrentOpennfoWindow) {
            mCurrentOpenInfoWindow = new google.maps.InfoWindow({
                content: content,
                disableAutoPan: true
            });
        }
        else {
            mCurrentOpenInfoWindow.setContent(content);
        }

        mCurrentOpenInfoWindow.open(mGoogleMap, anchor);

        mCurrentInfoWindowParent = parent;
    }
}

function closeCurrentInfoWindow() {
    if (mCurrentOpenInfoWindow) {
        mCurrentOpenInfoWindow.close();
        mCurrentInfoWindowParent = null;
    }
}

// ... Inside a function which creates an adds a google marker 
// in the variable gmarker. displayObject is just an object used to 
// keep the info window from opening multiple times for the same
// map item that has been clicked on.
google.maps.event.addListener(gmarker, 'click', function() {
    openNewInfoWindowAtAnchor(displayObject, gmarker, infoWindowData);
});

1 个答案:

答案 0 :(得分:0)

听起来您正在将多个点击侦听器附加到同一个标记。

您可以在devtools中的google.maps.event.addListener(gmarker, 'click', function()设置一个断点,看看每个标记是否多次点击它?

您也可以尝试使用google.maps.event.addListenerOnce(gmarker, 'click', function(),但我怀疑这会解决您的问题。

工作复制将有助于找出错误的来源。