2011-02-26 4 views
7

Как вы видите в следующем коде, маркеры перетаскиваются. В некоторых случаях, если маркер опущен в неправильной области (многоугольник), я хотел бы отменить событие капли, и, следовательно, маркер автоматически возвращается в исходное местоположение.Как отменить операцию перетаскивания маркера 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; 
} 

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

+1

Почему бы не просто использовать InfoWindow, чтобы показать маркера LAT/LNG, а не сделать маркер перемещаемой на всех? –

+0

Просто объявите их свойство draggable как false и их свойство clickable как true. Они все равно будут слушать клики и события наведения мыши. – amenadiel

+0

@MattBall Мне нужно перетащить. –

ответ

1

По-прежнему не удалось найти решения после этих лет, и все же снова сталкивается с этой проблемой. Хотелось бы позвонить по телефону event.cancelDrag().

Все, что я могу думать о том, чтобы проверить, если маркер принадлежит mypolygon, если не переместить его туда, где он был раньше:

  • На dragstart сохранить текущее местоположение в качестве preLocation
  • на dragend использования containsLocation(e.latLng, mypolygon)
    • да => ничего не делать
    • нет: установить местоположение маркера в preLocation.

google map containsLocation

google map Events

1

Я не помню, чтобы API Карт Google поддерживал его, но вы можете выполнять эту функцию самостоятельно, сохраняя движения маркеров в стек и извлекая старую позицию, когда вам это нужно. Я знаю, что это не безвозвратный ответ. Это просто общая идея. Но я надеюсь, что это поможет.

+0

На самом деле, почему вы не хотите, чтобы маркер был недоступен? –

+0

Это метод, который реализован здесь: [блог Duncan - API Карт Google - заблокированные перетаскиваемые маркеры] (https://duncan99.wordpress.com/2015/03/21/google-maps-api-locked-draggable -markers /) – ChrisW

Смежные вопросы