2011-02-26 101 views
7

正如您在下面的代碼中看到的,標記是可拖動的。在某些情況下,如果標記放在錯誤的區域(多邊形)中,我想取消放置事件,因此標記會自動返回到其原始位置。如何取消谷歌地圖標記拖動操作?

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

爲什麼不直接使用信息窗口來顯示標記的緯度/經度,而不是讓該標記可拖動呢? – 2011-02-26 23:43:10

+0

只需將其可拖動屬性聲明爲false,並將其可點擊屬性聲明爲true即可。他們仍然會聽取點擊和鼠標懸停事件。 – amenadiel 2014-08-18 12:15:11

+0

@MattBall我需要可拖動。 – 2017-09-06 14:15:44

回答

1

這些年來仍然找不到任何解決方案,並再次遇到這個問題。我希望有event.cancelDrag()來電。

所有我能想到的是檢查標記屬於mypolygon如果不將其移回在原處之前:

  • dragstart節省dragend使用containsLocation(e.latLng, mypolygon)當前位置爲preLocation
    • 是=>無能爲力
    • 沒有:標記位置設置爲preLocation

google map containsLocation

google map Events

1

我不記得Google Map API支持它,但是您可以通過將標記的移動保存到堆棧並在需要時提取舊位置來爲自己提供此功能。 我知道這不是無法理解的答案。這只是一般的想法。但我希望它會有幫助。

+0

真的,爲什麼你不想讓標記不可裁剪? – 2011-02-27 00:15:43

+0

這是在這裏實施的方法:[Duncan的博客 - 谷歌地圖API - 被鎖定的可拖動標記](https://duncan99.wordpress.com/2015/03/21/google-maps-api-locked-draggable-markers /) – ChrisW 2016-12-18 23:46:34