2017-06-29 3 views
0

私は、マップ上のピンを2つの関数呼び出しとマーカー[]配列を使って削除するGoogleマップ実装があります。Map marker [] arrayにイベントリスナーを追加する方法

これはうまくいきますが、マーカー変数が明示的に定義されていないため、関数にonClickイベントや他のタイプのイベントリスナーを追加する方法を理解できません。私は、これはここで

google.maps.event.addListener(markers, 'click', function() { 
window.location.href = this.url;}; 

を?:ようなものを追加することができるだろう

は、私の基本的なマップコードと機能である:

var pinlocations = [ 
    ['1', {lat: 30.266758, lng: -97.739080}, 12, '/establishments/1111'], 
    ['2', {lat: 30.267178, lng: -97.739050}, 11, '/establishments/1222'], 
    ['3', {lat: 30.267458, lng: -97.741231}, 10, '/establishments/1333'], 
    ['4', {lat: 30.388880, lng: -97.892276}, 9, '/establishments/1444'] 
]; 

     var markers = []; 
     var map; 

     function initMap() { 
     map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 12, 
      center: {lat: 30.267178, lng: -97.739050} 
     }); 

     } 

     function drop() { 
     clearMarkers(); 
     for (var i = 0; i < pinlocations.length; i++) { 
      var place = pinlocations[i]; 
      addMarkerWithTimeout(place[1], place[0], place[2], place[3], i * 200); 
     } 
     } 

     function addMarkerWithTimeout(position, title, zindex, url, timeout) { 
     window.setTimeout(function() { 
      markers.push(new google.maps.Marker({ 
      position: position, 
      map: map, 
      title: title, 
      zIndex: zindex, 
      url: url, 
      animation: google.maps.Animation.DROP 
      })); 
     }, timeout); 
     } 
+0

https://developers.google.com/maps/documentation/javascript/examples/event-simple。これはあなたが探しているものですか? marker.addListener( 'click'、..... ..... – gvfordo

+0

@gvfordoこれは機能ですが、私のような機能を介して呼び出されるマーカーの完全な配列に適用する方法は示されていません。単一のvarマーカーでイベントを呼び出す方法 – Keith

+0

新しいメーカーをvarに割り当てて、リスナーを追加し、varを配列にプッシュします。 – gvfordo

答えて

1

あなたは配列にイベントを追加していません、配列内の各要素に追加する必要があります。

// Iterate the markers array 
markers.forEach(function(marker){ 
    // Set up a click event listener for each marker in the array 
    marker.addListener('click', function() { 
    window.location.href = marker.url; 
    }); 
}); 

それとも、あなたは別のアプローチを取り、個々のマーカーが作成された時点でイベントを追加することができます。あなたは.forEach()アレイ法でこれを行うことができます。

function addMarkerWithTimeout(position, title, zindex, url, timeout) { 
    window.setTimeout(function() { 
     markers.push(new google.maps.Marker({ 
     position: position, 
     map: map, 
     title: title, 
     zIndex: zindex, 
     url: url, 
     animation: google.maps.Animation.DROP 
     }).addListener('click', function() { 
     window.location.href = this.url; 
     }); 
    }, timeout); 
    } 
+0

これは、配列がnullの場合でもinitmap関数に追加しますそこにforループの後にdrop()関数を追加する必要がありますか? – Keith

+0

@Keith表示されているコードから言うと難しいです。配列が完全に配置された後はいつでも行うことができます別のアプローチを取って、個々のマーカーが作成された瞬間にイベントを追加することができます... –

+0

2番目のオプションは、私がこれをきれいに行う必要があると思います。しかし、私がf統一。スニペットに構文エラーがありますか? – Keith

関連する問題