每当用户将鼠标悬停在地图上的多边形上时,我都会尝试在infowindows中显示动态数据。调试显示数据和其他infowindow / polygon设置都可以。我能够在鼠标悬停时获得颜色变化,只是infowindows没有出现。它背后的原因可能是什么?我在这里缺少什么?
statePolygon = new google.maps.Polygon({
paths: stateBorderCoords,
strokeColor: '#f33f00',
strokeOpacity: 1,
strokeWeight: 1,
fillColor: '#ff0000',
fillOpacity: 0.2
});
statePolygon.pId = infoText; // Fetching from a JSON response
statePolygon.wPet = wPet; // Fetching from a JSON response
statePolygon.infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(statePolygon,"mouseover",function(event){
this.setOptions({fillColor: "#00FF00"});
this.infoWindow.setPosition(event.latLng);
this.infoWindow.setContent(this.wPet);
this.infoWindow.open(map, this);
});
google.maps.event.addListener(statePolygon,"mouseout",function(){
this.setOptions({fillColor: "#FF0000"});
this.infoWindow.close();
});
google.maps.event.addListener(statePolygon, 'click', function(){
//createInfoWindow(this.pId);
});
statePolygon.setMap(map);
答案 0 :(得分:4)
如果你在行中省略“this”会发生什么:
this.infoWindow.open(map, this);
我在过去几天一直在与类似的东西作斗争,刚发现我的代码适用于google.maps.Markers(如谷歌针脚)但不适用于google.maps.Circles(我猜google.maps。多边形。)
我的猜测:“infoWindow.open(map,object)”试图将InfoWindow锚定到对象,似乎只适用于google.maps.Markers,而不是Circles,Polygons等。似乎工作的是“开放(地图)”,它不会将其锚定到任何东西。但是,必须明确设置infoWindow的位置(你已经在做了)。
修改强>
在我的情况下,这不起作用(假设全局变量映射)
var circle = { clickable: true,
strokeColor: "darkred",
strokeOpacity: 1,
strokeWeight: 1,
fillColor: "green",
fillOpacity: 1,
map: map,
center: new google.maps.LatLng(55.95,-3.19),
radius: 45
};
var marker1 = new google.maps.Circle(circle);
infoWindow = new google.maps.InfoWindow();
infoWindow.setContent("Hello");
inoWindow.setPosition(new google.maps.LatLng(55.95,-3.19));
infoWindow.open(map,marker1);
但这样做:
var circle = { clickable: true,
strokeColor: "darkred",
strokeOpacity: 1,
strokeWeight: 1,
fillColor: "green",
fillOpacity: 1,
map: map,
center: new google.maps.LatLng(55.95,-3.19),
radius: 45
};
var marker1 = new google.maps.Circle(circle);
infoWindow = new google.maps.InfoWindow();
infoWindow.setContent("Hello");
infoWindow.setPosition(new google.maps.LatLng(55.95,-3.19));
infoWindow.open(map);
唯一的区别在于最后一行。
考虑到上述帖子,打开后设置位置可能会覆盖锚位置,从而显示出来。
答案 1 :(得分:0)
首先打开InfoWindow,然后设置其位置:
google.maps.event.addListener(statePolygon,"mouseover",function(event){
this.setOptions({fillColor: "#00FF00"});
this.infoWindow.setContent(this.wPet);
this.infoWindow.open(map);
this.infoWindow.setPosition(event.latLng);
});
然而,我意识到如果鼠标移动到InfoWindow的顶部(即使它位于多边形的顶部),它将被计算为好像鼠标移动到多边形之外。因此,多边形将变为红色,Infowindow将关闭。但由于鼠标仍然在多边形内部,因此信息窗将再次打开,从而导致闪烁。
我不知道如何解决这个问题(尝试了暂停,但它也不可靠)。我只考虑将Infowindow放在预设位置而不是event.latLng。