2016-03-24 18 views
-1

マーカーのlatLngに基づいて私のインフォボックスを配置しようとしていますが、私は位置(latLng)を試しましたが、availは使用しませんでしたし、マーカー位置に対応しないのでpixelOffsetをハードコードしたくない、私はまた、pixelOffset(latLng)、getPositionとsetPositionメソッドを試しました。上記のgoogle infoBoxの位置

どれも右のそれをやっているように見えるん:/

for (var i = data.length - 1; i >= 0; i--){ 
      var Lat = data[i].Item.Coordinate.Lat; 
      var Lon = data[i].Item.Coordinate.Lon; 
      var LatLon = new gm.LatLng(jobLat, +jobLon); 

      var marker = new gm.Marker({ 
       position: LatLon, 
       map: map, 
       visible: true 
      }); 

      var infobox = new InfoBox ({ 
       position: marker.position or LatLon 
      }); 

      marker.newContent = document.getElementById("infobox_"+data[i].Item.Id); 

      gm.event.addListener(marker, 'click', (function (marker) { 
       return function (pin, suppressInfoWindow) { 
        if (!suppressInfoWindow) { 
          infobox.setContent(marker.newContent); 
          infobox.open(map, marker); 
        } 
      } 
} 
resultMarkers.push(marker); 

これは、マーカーを作成し、あなたのdataアレイの上大丈夫

var infoboxWidth = -650/2; 
     if(getWidth === 'xs'){ 
      infoboxWidth = -320/2; 
     } 

     var infobox = new InfoBox({ 
      pixelOffset: new gm.Size(infoboxWidth, -65), 
      alignBottom: true 
     }); 

答えて

0

あなたのループを動作しているようです。
毎回、infobox変数を再初期化して、現在のマーカーの位置を使用します。
ループの最後には、infoboxという1つの変数があり、最後のマーカーの位置になります。

マーカーのいずれかをクリックすると、その位置にそのインフォボックスが開きます。マーカーを作成した瞬間に、再作成されたinfobox変数のn番目の繰り返しがあった位置ではありません。

イベントリスナーにインフォボックスの位置を設定するだけです。

for (var i = data.length - 1; i >= 0; i--){ 
    var Lat = data[i].Item.Coordinate.Lat; 
    var Lon = data[i].Item.Coordinate.Lon; 
    var LatLon = new gm.LatLng(jobLat, +jobLon); 

    var marker = new gm.Marker({ 
     position: LatLon, 
     map: map, 
     visible: true 
    }); 

    var infobox = new InfoBox(); 

    marker.newContent = document.getElementById("infobox_"+data[i].Item.Id); 

    gm.event.addListener(marker, 'click', (function (marker) { 
     return function (pin, suppressInfoWindow) { 
      if (!suppressInfoWindow) { 
        infobox.setContent(marker.newContent); 
        infobox.setPosition(marker.getPosition()); 
        infobox.open(map, marker); 
      } 
    } 
} 
resultMarkers.push(marker); 
+0

私はそれを試みましたが、常にマーカーがない間違った場所にinfoBoxを置いていました。 – MrNew

+0

はpixelOffsetを使用しようとしましたが、これはinfoBoxの幅に基づいて動作し、基本的に幅を2で割ってoffSet位置を取得します。しかし、それはモバイルになると私は考えの薄いではありません。 infoBoxは、lgの画面では600pxの幅、モバイルでは320pxの幅であるとします。上記のコードを – MrNew

+0

に追加しました。 – MrNew

関連する問題