Как отменить операцию перетаскивания маркера карты 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?


person Daniel B    schedule 26.02.2011    source источник
comment
Почему бы просто не использовать InfoWindow для отображения широты/долготы маркера и вообще не делать маркер перетаскиваемым?   -  person Matt Ball    schedule 27.02.2011
comment
Просто объявите их свойство draggable как false, а свойство clickable как true. Они по-прежнему будут прослушивать клики и события наведения мыши.   -  person ffflabs    schedule 18.08.2014
comment
@MattBall Мне нужно, чтобы меня можно было перетаскивать.   -  person Daniel B    schedule 06.09.2017


Ответы (2)


Все еще не мог найти никаких решений после этих лет, и снова столкнулся с этой проблемой. Хотел бы я, чтобы не было event.cancelDrag()звонка.

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

  • dragstart сохраните текущее местоположение как preLocation
  • on dragend use containsLocation(e.latLng, mypolygon)
    • yes => do nothing
    • нет: установите положение маркера на preLocation.

карта Google содержит местоположение

события карты Google

person Daniel B    schedule 05.09.2017

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

person Maxim Welikobratov    schedule 27.02.2011
comment
В самом деле, почему вы вообще не хотите, чтобы маркер нельзя было перетаскивать? - person Maxim Welikobratov; 27.02.2011