Javascript 谷歌地图API V3-两张地图上的infowindows@markers

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”代

我正在编写Google Map API V3代码,我是JS的初学者,有点困惑

以下是我试图做的:我有一个数据库,其中包含Lat/Lng、地址、图片、描述。。。。等

在我的最后一页,我有两张地图,一张是法国地图,一张是巴黎地图。 如果lat/lng位于巴黎,则标记位于巴黎地图上,如果位于巴黎以外,则标记位于法国地图上

到目前为止,我已经做了我想要的,但我被困在了信息窗口上:( 我可以打开它们,但不能自动关闭它们。。。 我只想同时打开一个信息窗口

以下是我的代码(仅JS部分):

(“mapidf”代表巴黎,“mapfr”代表法国,我已经取消了使用infowindow的尝试,但没有成功)

函数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);
}