【问题标题】:How to cancel a google map marker drag operation?如何取消谷歌地图标记拖动操作?
【发布时间】:2011-07-05 01:34:58
【问题描述】:

正如您在以下代码中看到的,标记是可拖动的。在某些情况下,如果标记被放置在错误的区域(多边形)中,我想取消放置事件,因此标记会自动回到原来的位置。

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事件中被删除了,如何取消它?

【问题讨论】:

  • 为什么不直接使用 InfoWindow 来显示标记的 lat/lng,而根本不让标记可拖动?
  • 只需将它们的可拖动属性声明为假,将可点击属性声明为真。他们仍然会监听点击和鼠标悬停事件。
  • @MattBall 我需要可拖动。

标签: javascript google-maps draggable marker


【解决方案1】:

这些年来仍然找不到任何解决方案,并且再次遇到此问题。我希望有event.cancelDrag()可以打电话。

我能想到的就是检查标记是否属于mypolygon,如果不将其移回原来的位置:

  • 打开dragstart,将当前位置保存为preLocation
  • dragend 上使用containsLocation(e.latLng, mypolygon)
    • 是 => 什么都不做
    • 否:将标记位置设置为preLocation

google map containsLocation

google map Events

【讨论】:

    【解决方案2】:

    我不记得 Google Map API 支持它,但您可以通过将标记的移动保存到堆栈并在需要时提取旧位置来为自己提供此功能。 我知道这不是无可辩驳的答案。这只是一般的想法。但我希望它会有所帮助。

    【讨论】:

    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2011-08-07
    相关资源
    最近更新 更多