我在InfoWindows开放时遇到问题。代码调用open函数,但在用户执行其他与地图交互的操作之前,信息窗口不会出现在屏幕上,通常是单击或移动鼠标。
以下是预期的逻辑:单击标记时会打开一个信息窗口。如果已打开信息窗口,则会关闭上一个信息窗口,然后打开新信息窗口。如果单击地图,信息窗口将关闭。
观察到的问题:地图加载。我点击一个标记,出现一个信息窗口。我通过单击信息窗口上的x或单击地图来关闭它。 A)我点击另一个标记。什么都没发生。我再次点击,出现信息窗口。 B)我点击另一个标记。什么都没发生。我再次点击它,出现信息窗口。
无论哪种方式,都需要额外的用户输入才能显示信息窗口。
我还实现了另一种逻辑:在鼠标悬停事件触发标记后显示信息窗口。仅在用户单击地图时关闭,关闭信息窗口或将光标移动到其他标记上。
观察到的行为:与以前一样的问题,除了信息窗口有时仅在光标移出标记后才会出现。
注意:
以下是代码:
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);
});
答案 0 :(得分:0)
听起来您正在将多个点击侦听器附加到同一个标记。
您可以在devtools中的google.maps.event.addListener(gmarker, 'click', function()
设置一个断点,看看每个标记是否多次点击它?
您也可以尝试使用google.maps.event.addListenerOnce(gmarker, 'click', function()
,但我怀疑这会解决您的问题。
工作复制将有助于找出错误的来源。