Переключение перетаскивания маркеров Google Map, добавленных как Draggable - PullRequest
2 голосов
/ 15 июля 2010

Я занимаюсь разработкой приложения Google Map API v2, в котором маркеры загружаются из базы данных. Затем эти маркеры могут быть перетащены пользователем в новое место и сохранены в базе данных.

Я добавляю эти маркеры как перетаскиваемые, однако я не просто хочу, чтобы пользователи могли перетаскивать их случайно. Поэтому я добавил кнопку, чтобы включить перетаскивание, а затем снова нажмите, чтобы отключить его.

Единственная проблема в том, что я не уверен, как переключить возможность перетаскивать маркеры, не перезагружая их снова, поскольку на карте может быть несколько сотен маркеров, что может занять некоторое время.

Есть идеи, как мне этого добиться?

Спасибо

1 Ответ

1 голос
/ 16 июля 2010

Это должно быть очень легко сделать.Для начала нужно сохранить ссылку на все ваши маркеры.Затем, чтобы переключить режим перетаскивания, вы можете просто перебрать свои маркеры и вызвать метод enableDragging() или disableDragging() для каждого маркера.

Для этогочтобы работать, ваши маркеры должны быть инициализированы с параметром GMarkerOptions.draggable, установленным на true, но я предполагаю, что вы уже делаете это.

Вот полностью рабочий пример:

<!DOCTYPE html>
<html> 
<head>
   <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false" 
           type="text/javascript"></script>
</head> 
<body onunload="GUnload()">
   <div id="map" style="width: 400px; height: 300px"></div> 

   <input type="button" value="Toggle Drag" onclick="toggleDrag()">

   <script type="text/javascript"> 
      var map = new GMap2(document.getElementById("map"));
      var point = new GLatLng(51.49, -0.12);
      var marker = new GMarker(point, { draggable: true });

      map.setCenter(point, 8);
      map.addOverlay(marker);

      function toggleDrag() {
        if (marker.draggingEnabled()) {
          marker.disableDragging();
        }
        else {
          marker.enableDragging();
        }
      }
   </script> 
</body> 
</html>
...