我有一个谷歌地图在我的网站和附加到它的事件处理程序的moveend
GEvent.addListener(map, "moveend", function()
{
map.clearovrelays();
GetLayerDataFromServer(); //it set the markers again on the map according the map position
});我也有点击标记的事件处理程序
GEvent.addListener(marker, 'click', function()
{
marker.openInfoWindowHtml('this is the data');
});我的问题是
当用户按下地图上的一个标记时,它会打开相关标记的openInfoWindowHtml。
它还会将地图移动到该标记位置。然后它会触发事件
map.moveend在map.moveend事件中,我清除了地图上的所有标记,并根据地图的新位置重新加载它们。
结果是,当用户点击标记时,它会打开第二次他的indoWindowHtml,它会清除地图并再次加载标记,而不会显示所单击标记的indoWindowHtml。
我的问题是,我应该怎么做才能显示infoWindowHtml?
发布于 2009-09-18 12:07:38
您可以设置一个标志,指示用户是否单击了某个标记,如果是,则不清除地图。
var marker_clicked = false;
GEvent.addListener(map, "moveend", function()
{
if(!marker_clicked)
{
map.clearovrelays();
GetLayerDataFromServer(); //it set the markers again on the map acording the map position
}
marker_clicked = false;
});
GEvent.addListener(marker, 'click', function()
{
marker_clicked = true;
marker.openInfoWindowHtml('this is the data');
});发布于 2009-09-21 20:22:12
一种可能的替代策略是使用{suppressMapPan:true}打开您的信息窗口,这会告诉地图在信息窗口打开时不要平移。这样,您就知道任何地图移动都是用户实际的地图移动。
注意:{suppressMapPan:true}没有文档记录,因此它可能会在未来的某个版本中消失。
发布于 2009-09-21 20:34:11
另一种策略是编写
GEvent.addListener(marker, 'click', function()
{
var iwAnchor = marker.getIcon().infoWindowAnchor;
var iconAnchor = marker.getIcon().iconAnchor;
var offset = new GSize(iwAnchor.x-iconAnchor.x,iwAnchor.y-iconAnchor.y);
map.openInfoWindowHtml(marker.getLatLng(),'this is the data',{pixelOffset:offset});
});然后,不是调用clearOverlays(),而是一个接一个地遍历您的标记,移除它们。
通过打开地图上的信息窗口而不是标记,当删除标记时,它不会自动关闭。
信息窗口现在是一个覆盖,所以clearOverlays删除了它,所以你不能使用clearOverlays。循环遍历标记,逐个删除它们,这听起来效率很低,但clearOverlays在内部执行了一个非常类似的循环。
上面的iconAnchor计算只是将信息窗口定位在使用marker.openInfowindowHtml时的相同位置,而不是在标记的底部。
https://stackoverflow.com/questions/1444021
复制相似问题