2011-02-26 17 views
7

Jak widać w poniższym kodzie, znaczniki można przeciągać. W niektórych przypadkach Jeśli znacznik zostanie upuszczony w niewłaściwym obszarze (wielokącie), chciałbym anulować zdarzenie upuszczenia i w konsekwencji znacznik automatycznie powróci do swojej pierwotnej lokalizacji.Jak anulować operację przeciągania znacznika mapy google?

function placeMarker(latlng, color, isDraggable) { 
    var marker = new GMarker(latlng, { icon: getIcon(color), draggable: true }); 
    map.addOverlay(marker); 
    GEvent.addListener(marker, "dragend", function() { 
     //redraw polygons again 
    }); 
    GEvent.addListener(marker, "click", function() { 
     var latlng = marker.getPoint(); 
     map.openInfoWindowHtml(marker.getPoint(), latlng.y + ", " + latlng.x); 
    }); 
    return marker; 
} 

Powstaje pytanie w jaki sposób mogę anulować zdarzenie przeciągania znacznika, gdy jest już spadła w dragend wydarzenia?

+1

Dlaczego nie wystarczy użyć InfoWindow pokazać markera lat/lng, a nie robić znacznik Draggable w ogóle? –

+0

Po prostu zadeklaruj ich właściwość przeciągalną jako wartość false, a ich klikalną właściwość jako prawdziwą. Nadal będą słuchać kliknięć i wydarzeń najedź myszką. – amenadiel

+0

@MattBall Muszę być przeciągalny. –

Odpowiedz

1

Nadal nie mogłem znaleźć żadnych rozwiązań po tych latach, a po raz kolejny napotykałem ten problem. Chciałbym, żeby zadzwonił event.cancelDrag().

Wszystko, co mogę myśleć o to, aby sprawdzić, czy marker należy do mypolygon jeśli nie przenieść go z powrotem do miejsca, gdzie to było wcześniej:

  • Na dragstart zapisać aktualną lokalizację jako preLocation
  • na dragend użytku containsLocation(e.latLng, mypolygon)
    • yes => zrobić nic
    • no: ustaw lokalizację znacznika do preLocation.

google map containsLocation

google map Events

1

Nie pamiętam, aby interfejs API Google Map go obsługiwał, ale możesz obsługiwać tę funkcję samodzielnie, zapisując ruchy znaczników na stosie i wyodrębniając starą pozycję, kiedy jej potrzebujesz. Wiem, że nie jest to odpowiedź nieodblokowana. To tylko ogólna idea. Ale mam nadzieję, że to pomoże.

+0

Naprawdę, dlaczego nie chcesz, aby marker był w ogóle niemożliwy do ściągnięcia? –

+0

To jest metoda, która jest zaimplementowana tutaj: [Blog Duncana - Google Maps API - zablokowane znaczniki przeciągania] (https://duncan99.wordpress.com/2015/03/21/google-maps-api-locked-draggable-markers /) – ChrisW

Powiązane problemy