2016-04-28 9 views
-1

私は、クリックするとマーカーの周りに地図を表示する機能を持っています。GoogleマップpanToとaddListenerとの競合

google.maps.event.addListener(marker, 'click', function() { 
    map.panTo(marker.getPosition()); 
}); 

しかし、これは明らかにマーカーを取得するときに私が持っているのaddListenerに影響を与えます。

google.maps.event.addListener(map, 'idle', function() { 
    $.get("/map.json", function(galleries) { 
    var bounds = map.getBounds(); 
    for (var i = 0; i < galleries.length; i++) { 
     var latitude = galleries[i].latitude; 
     var longitude = galleries[i].longitude; 
     var position = new google.maps.LatLng(latitude, longitude) 
     if (bounds.contains(position)){ 
     bindInfobox(map, galleries[i]); 
     } 
    } 
}); 

はのaddListenerに例外を作るための方法、またはこれを回避する別の簡単な方法はありますか?ありがとう!

答えて

0

すぐに回避するには、マップをパンする前にイベントリスナーを削除してから、マップがパニングを終了したらイベントリスナーを再度追加することができます。

// add map idle event at load time 
google.maps.event.addListener(map, 'idle', mapIdle); 


//remove map idle event and then re-attach the event 
google.maps.event.addListener(marker, 'click', function() { 
    google.maps.event.clearListeners(map, 'idle'); 
    google.maps.event.addListenerOnce(map, 'idle', function() { 
     //add the idle event once the map has finised panning 
     google.maps.event.addListener(map, 'idle', mapIdle); 
    }); 

    map.panTo(marker.getPosition());  
}); 

function mapIdle() { 
    $.get("/map.json", function (galleries) { 
     var bounds = map.getBounds(); 
     for (var i = 0; i < galleries.length; i++) { 
      var latitude = galleries[i].latitude; 
      var longitude = galleries[i].longitude; 
      var position = new google.maps.LatLng(latitude, longitude) 
      if (bounds.contains(position)) { 
       bindInfobox(map, galleries[i]); 
      } 
     } 
    }); 
} 
関連する問題