![](/img/trans.png)
[英]Google map api v3: Onclick of a button make the polygon uneditable
[英]Google map api v3: Adding custom undo/redo function for edited Polygon
我具有一項功能,用戶可以在其中在Google地圖上繪制多邊形。 多邊形完成后,他可以對其進行編輯,但不能添加新的多邊形。 同樣,一旦用戶單擊任何一個頂點,它就會刪除該節點。 通常,在編輯多邊形或任何形狀時,它會顯示默認的撤消按鈕。 但就我而言,我已禁用了相同的功能,因為我需要使用自定義的“撤消”和“重做”按鈕來執行相同的操作。 但是我不確定該怎么做。 誰能幫我這個忙嗎?
我的理論:在完成多邊形后,我設置事件insert_at,set_at並單擊,在其中設置edits數組,以便可以跟蹤所有編輯。 單擊撤消按鈕后,我將最后一個元素從edits數組中彈出,並將其添加到redo數組中,並將多邊形路徑設置為彈出元素的路徑。 為了使這一點清楚,下面是代碼:
google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
drawingManager.setDrawingMode(null);
myArea = polygon;
myArea.setOptions({ editable: true});
google.maps.event.addListener(polygon.getPath(), 'set_at', function(ind) {
edits_arr.push(polygon);
});
google.maps.event.addListener(polygon.getPath(), 'insert_at', function(ind) {
edits_arr.push(polygon);
});
google.maps.event.addListener(polygon, 'click', function(e) {
polygon.getPath().removeAt(e.vertex);
edits_arr.push(polygon);
});
});
撤消點擊:
$('#undo').click(function(){
if(edits_arr.length > 0){
var temp = edits_arr.pop();
redo_arr.push(temp);
var pathArrayTemp = temp.getPath();
myArea.setMap(null);
myArea.setPaths(pathArrayTemp);
myArea.setMap(map);
}
});
但是,所有這些似乎都不起作用。 我知道我在這里錯過了一些東西,但無法弄清楚什么.. :(
有人可以幫我嗎?
您必須克隆redo_arr的路徑
在您的redo_arr中,一個對象有許多鏈接
俄語:
Тыдолженклонироватьпутьвисториюсейчасвтвоёмredo_arrкучассылокнаодинитотжеобъект
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.