Javascript 自定义信息窗口内容>;谷歌地图

Javascript 自定义信息窗口内容>;谷歌地图,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在制作一个使用谷歌地图API的位置图。预期的结果是: 具有多个位置的地图(已完成、已测试、按需工作) 定制管脚(完成、测试、按需工作) ---我搞不懂的事情--- 信息窗口中的自定义内容(单击pin,信息窗口将打开,其中包含姓名、地址等内容。) 位置列表中的链接,用于定位地图并打开“信息”窗口 到目前为止: 函数初始化(){ 变量myOptions={ 缩放:11, 中心:新的google.maps.LatLng(-33.80254451.20203), mapTypeId:google.m

我正在制作一个使用谷歌地图API的位置图。预期的结果是:

  • 具有多个位置的地图(已完成、已测试、按需工作)
  • 定制管脚(完成、测试、按需工作)
  • ---我搞不懂的事情---

  • 信息窗口中的自定义内容(单击pin,信息窗口将打开,其中包含姓名、地址等内容。)
  • 位置列表中的链接,用于定位地图并打开“信息”窗口
  • 到目前为止:

    函数初始化(){
    变量myOptions={
    缩放:11,
    中心:新的google.maps.LatLng(-33.80254451.20203),
    mapTypeId:google.maps.mapTypeId.ROADMAP
    }
    var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
    设置标记(地图,藤本植物);
    }
    var lianaLocations=[
    ['1', -33.750829,151.24086, 1],
    ['2', -33.846405,151.211677, 2],
    ['3', -33.876321,151.241171, 3],
    ['4', -33.871511,151.159599, 4],
    ['5', -33.901535,151.161743, 5],
    ['5', -33.676461,151.304244, 6]
    ];
    功能设置标记(地图、位置){
    var image=new google.maps.MarkerImage('images/icon\u mapPin.png',
    新google.maps.Size(30,40),
    新google.maps.Point(0,0),
    新的google.maps.Point(0,40));
    var shadow=new google.maps.MarkerImage('images/icon\u mapPin\u shadow.png',
    新谷歌地图尺寸(26,20),
    新google.maps.Point(0,0),
    新的google.maps.Point(-13,21));
    变量形状={
    坐标:[1,1,1,40,30,40,30,1],
    类型:“poly”
    };
    对于(变量i=0;i
    我正在使用V3。。。如果有关系的话

    我知道我还差一点。如有任何协助或指示,将不胜感激

    提前谢谢


    @rrfive

    因此,您想要做的是有一个信息窗口,但它为每个标记获取不同的内容。i、 e.内容及其位置随用户点击而变化。因此,在创建标记的循环中,还需要创建信息窗口。但是,您需要将其分离到另一个函数,否则最终会出现这样的情况,即每个信息窗口只包含最后一个标记的内容

    function setMarkers(map, locations) {
      ...
      var infowindow =  new google.maps.InfoWindow({
        content: ''
      });
    
      for (var i = 0; i < locations.length; i++) {
        var liana = locations[i];
        var myLatLng = new google.maps.LatLng(liana[1], liana[2]);
        var marker = new google.maps.Marker({
          position: myLatLng,
          map: map,
          shadow: shadow,
          icon: image,
          shape: shape,
          title: liana[0],
          zIndex: liana[3]
        });
    
        // add an event listener for this marker
        bindInfoWindow(marker, map, infowindow, "<p>" + liana[0] + "</p>");
      }
    }
    
    function bindInfoWindow(marker, map, infowindow, html) {
        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(html);
            infowindow.open(map, marker);
        });
    } 
    
    功能设置标记(地图、位置){
    ...
    var infowindow=new google.maps.infowindow({
    内容:“”
    });
    对于(变量i=0;i”);
    }
    }
    函数bindInfoWindow(标记、地图、infowindow、html){
    google.maps.event.addListener(标记'click',函数(){
    setContent(html);
    信息窗口。打开(地图、标记);
    });
    } 
    
    我不确定您从何处获取地址详细信息-在我的示例中,我只是使用您传递给“title”属性的数组的同一部分,然后在信息窗口中显示该属性。可能您必须使用查找每个latLng的地址,然后它可能是数组中的一个附加列

    更新:如果需要像单击标记一样使用普通链接触发器,则需要将标记放入数组(将其设为全局变量,在创建标记后将其推入数组)。单击一个链接调用一个javascript函数,传入一个数字以标识数组中要使用的元素。然后你“触发”点击该标记,例如

    <a href="#" onclick="showWindow(0); return false">One</a>
    <a href="#" onclick="showWindow(1); return false">Two</a>
    
    function showWindow(id) {
        google.maps.event.trigger(markersArray[id], 'click');
    }
    
    
    功能显示窗口(id){
    google.maps.event.trigger(markersArray[id],'click');
    }
    
    因此,您想要做的是拥有一个信息窗口,但它为每个标记获取不同的内容。i、 e.内容及其位置随用户点击而变化。因此,在创建标记的循环中,还需要创建信息窗口。但是,您需要将其分离到另一个函数,否则最终会出现这样的情况,即每个信息窗口只包含最后一个标记的内容

    function setMarkers(map, locations) {
      ...
      var infowindow =  new google.maps.InfoWindow({
        content: ''
      });
    
      for (var i = 0; i < locations.length; i++) {
        var liana = locations[i];
        var myLatLng = new google.maps.LatLng(liana[1], liana[2]);
        var marker = new google.maps.Marker({
          position: myLatLng,
          map: map,
          shadow: shadow,
          icon: image,
          shape: shape,
          title: liana[0],
          zIndex: liana[3]
        });
    
        // add an event listener for this marker
        bindInfoWindow(marker, map, infowindow, "<p>" + liana[0] + "</p>");
      }
    }
    
    function bindInfoWindow(marker, map, infowindow, html) {
        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(html);
            infowindow.open(map, marker);
        });
    } 
    
    功能设置标记(地图、位置){
    ...
    var infowindow=new google.maps.infowindow({
    内容:“”
    });
    对于(变量i=0;i”);
    }
    }
    函数bindInfoWindow(标记、地图、infowindow、html){
    google.maps.event.addListener(标记'click',函数(){
    setContent(html);
    信息窗口。打开(地图、标记);
    });
    } 
    
    我不确定您从何处获取地址详细信息-在我的示例中,我只是使用您传递给“title”属性的数组的同一部分,然后在信息窗口中显示该属性。可能您必须使用查找每个latLng的地址,然后它可能是数组中的一个附加列

    更新:如果需要像单击标记一样使用普通链接触发器,则需要将标记放入数组(将其设为全局变量,在创建标记后将其推入数组)。单击一个链接调用一个javascript函数,传入一个numb