Javascript 谷歌地图API V3-两张地图上的infowindows@markers
我正在编写Google Map API V3代码,我是JS的初学者,有点困惑 以下是我试图做的:我有一个数据库,其中包含Lat/Lng、地址、图片、描述。。。。等 在我的最后一页,我有两张地图,一张是法国地图,一张是巴黎地图。 如果lat/lng位于巴黎,则标记位于巴黎地图上,如果位于巴黎以外,则标记位于法国地图上 到目前为止,我已经做了我想要的,但我被困在了信息窗口上:( 我可以打开它们,但不能自动关闭它们。。。 我只想同时打开一个信息窗口 以下是我的代码(仅JS部分): (“mapidf”代表巴黎,“mapfr”代表法国,我已经取消了使用infowindow的尝试,但没有成功)Javascript 谷歌地图API V3-两张地图上的infowindows@markers,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在编写Google Map API V3代码,我是JS的初学者,有点困惑 以下是我试图做的:我有一个数据库,其中包含Lat/Lng、地址、图片、描述。。。。等 在我的最后一页,我有两张地图,一张是法国地图,一张是巴黎地图。 如果lat/lng位于巴黎,则标记位于巴黎地图上,如果位于巴黎以外,则标记位于法国地图上 到目前为止,我已经做了我想要的,但我被困在了信息窗口上:( 我可以打开它们,但不能自动关闭它们。。。 我只想同时打开一个信息窗口 以下是我的代码(仅JS部分): (“mapidf”代
函数CreateMarker(标记、地图、信息窗口、描述)
{
google.maps.event.addListener(标记“单击”);
marker.setMap(map);
}
函数初始化(listedpoints){
var mapidfOptions={
中心:{lat:48.856614,lng:2.352222},
缩放:11
};
变量映射选项={
中心:{lat:46.227638,lng:2.213749},
缩放:5
};
var mapidf=new google.maps.Map(document.getElementById('maps-idf'),
地图(可选);
var mapfr=new google.maps.Map(document.getElementById('maps-fr'),
地图选项);
var infowindow=新数组();
var marker=新数组();
for(var i=0;imax_lat|| | listedspoints[i]['lat']max_lng | listedspoints[i]
您可能会注意到我做错的其他事情……请随意批评这段代码:)
非常感谢最简单的方法可能是创建一个info窗口实例,并将其重新用于所有标记,如下所示:
var infowindow = new google.maps.InfoWindow({});
var marker = new Array();
for (var i = 0; i < data.length; i++) {
marker[i] = new google.maps.Marker({
position: new google.maps.LatLng(data[i]['lat'], data[i]['lng']),
title: data[i]['address'],
map: map
});
google.maps.event.addListener(marker, 'click', function () {
infowindow.setContent('Some content goes here');
infowindow.open(map);
});
}
var infowindow=new google.maps.infowindow({});
var marker=新数组();
对于(变量i=0;i
根据:
最佳实践:为了获得最佳用户体验,只有一个信息窗口
应该在地图上随时打开。多个信息窗口生成
地图看起来杂乱无章。如果一次只需要一个信息窗口,
您可以只创建一个InfoWindow对象并在不同的位置打开它
地图事件的位置或标记,如用户单击。如果你这样做
需要多个信息窗口,可以显示多个信息窗口
同时创建对象
在这种情况下,单击新标记时,信息窗口应自动关闭,而无需调用close()方法
jsiddle:如果希望每个地图都有一个标记,请为每个地图创建一个单独的信息窗口,并像绘制地图一样将其与标记相关联
for (var i = 0; i < ListeDesPoints.length; i++) {
marker[i] = new google.maps.Marker({
position: new google.maps.LatLng(ListeDesPoints[i]['lat'], ListeDesPoints[i]['lng']),
title: ListeDesPoints[i]['address']
});
var max_lat = 48.9602260;
var min_lat = 48.7451930;
var max_lng = 2.6327379;
var min_lng = 2.0946256;
if (ListeDesPoints[i]['lat'] > max_lat || ListeDesPoints[i]['lat'] < min_lat || ListeDesPoints[i]['lng'] > max_lng || ListeDesPoints[i]['lng'] < min_lng) {
var map = mapfr;
var infowindow = infowindowfr;
} else {
var map = mapidf;
var infowindow = infowindowidf;
}
//infowindow[i] = new google.maps.InfoWindow({ content: "" });
var description = '<h2>' + ListeDesPoints[i]['address'] + '</h2><img src="' + ListeDesPoints[i]['image'] + '" />';
CreateMarker(marker[i], map, infowindow, description);
}
发布的代码中没有任何标记。请提供一个演示您的问题的示例。谢谢,我尝试了这种方式,但它总是打开相同的窗口。。。geocodezip发布的解决方案确实有效,再次感谢:)嗯。。我对同一个窗口有点困惑:)你试过a贴吗?是的,我试过了,它很有效。在我做的每个不同的测试中,当我在循环中调用infowindow时,它都不起作用。它有一个功能。。。正如我所说,我对js了解不多,我理解我读过的代码,但我仍然是一个初学者。谢谢你的帮助!!
for (var i = 0; i < ListeDesPoints.length; i++) {
marker[i] = new google.maps.Marker({
position: new google.maps.LatLng(ListeDesPoints[i]['lat'], ListeDesPoints[i]['lng']),
title: ListeDesPoints[i]['address']
});
var max_lat = 48.9602260;
var min_lat = 48.7451930;
var max_lng = 2.6327379;
var min_lng = 2.0946256;
if (ListeDesPoints[i]['lat'] > max_lat || ListeDesPoints[i]['lat'] < min_lat || ListeDesPoints[i]['lng'] > max_lng || ListeDesPoints[i]['lng'] < min_lng) {
var map = mapfr;
var infowindow = infowindowfr;
} else {
var map = mapidf;
var infowindow = infowindowidf;
}
//infowindow[i] = new google.maps.InfoWindow({ content: "" });
var description = '<h2>' + ListeDesPoints[i]['address'] + '</h2><img src="' + ListeDesPoints[i]['image'] + '" />';
CreateMarker(marker[i], map, infowindow, description);
}