我已经看到了与此相似的其他问题( here ),但我无法从帖子中获取更多信息。
以下是我尝试实现的方法(取自here ),但窗口相互重叠(网站2和网站4 )。
以下是标记和InfoWindow位置的列表。
var locations = [
// Array Format: Site Name, Site Info, Marker lat, Marker lng, InfoWindow lat, InfoWindow lng
['Site 1', '<div>'+'<h6>Site 1</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 23.141162, 120.120495, 23.141162, 120.120495],
['Site 2', '<div>'+'<h6>Site 2</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 22.711022, 120.541029, 22.711022, 120.541029],
['Site 3', '<div>'+'<h6>Site 3</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 23.317840, 120.267284, 23.317840, 120.267284],
['Site 4', '<div>'+'<h6>Site 4</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 22.71637, 120.54331, 24.71637, 120.54331],
];
这似乎是一个天真的解决方案...... 是否有任何可用的属性(例如 Bootstrap data-placement )可以设置InfoWindow在商标的顶部,底部,左侧或右侧侧的位置?也许我误解了。
我也尝试了setPosition
但是infoWindows无法正常显示。
function setMarkers(map,locations){
var i
for (i = 0; i < locations.length; i++)
{
var name = locations[i][0]
var lat = locations[i][2]
var long = locations[i][3]
var latInfo = locations[i][4]
var longInfo = locations[i][5]
var latlngset = new google.maps.LatLng(lat, long);
var marker = new google.maps.Marker({
title: name,
position: latlngset,
winLatLng: winLatLng,
map: map
});
map.setCenter(marker.getPosition())
var content = locations[i][1];
var infowindow = new google.maps.InfoWindow()
var winLatLng = new google.maps.LatLng(latInfo, longInfo);
google.maps.event.addListener(marker, 'click', (function(marker,content,infowindow,winLatLng){
return function() {
infowindow.setContent(content);
infoWindow.setPosition(winLatLng);
infowindow.open(map)
};
})(marker,content,infowindow,winLatLng));
google.maps.event.trigger(marker, 'click');
}
}
上查看我的 JSFiddle
答案 0 :(得分:0)
有办法做到这一点。要移动信息窗,请使用setPosition
。
在信息窗口中调用setPosition(),或 使用InfoWindow.open()方法将信息窗口附加到新标记。
注意:如果在不传递标记的情况下调用open(),InfoWindow将会 使用施工时指定的位置 InfoWindowOptions对象文字。
有关infowindow的详细信息:InfoWindows
自定义InfoWindow示例:Customization