2017-03-23 54 views
0

我在網上發現了幾篇文章,並在堆棧溢出中解釋瞭如何選擇多個標記的幾篇文章,但我一直無法找到任何可用於拖動2個標記的工具同時。我已經能夠使其工作的方式允許1個標記在其兄弟上觸發事件並拖動相關標記,但不知怎的,它會停止點擊標記上的拖動事件。同時拖動2個谷歌地圖標記

我不能使用複雜的多邊形,因爲無法更改複雜標記svg上只有一條路徑的顏色。我必須創建2個SVG,一個用於中心填充,另一個用於外部填充,然後我必須更改外部填充的顏色。

這是如何工作的。

首先我創建標記,然後將它們放置在相同的位置。

然後我將這些標記傳遞給這個函數。

addMultiMarkerListener:function(id, outer, inner){ 
    var arr = ['mousedown', 'mouseup', 'click','mouseover','mouseout', 'dragend','drag','dragstar']; 
    var evtArr = {} 
     _.each(arr, function(evt){ 
      evtArr[evt] = {}; 
      evtArr[evt][id] = false; 

      outer.addListener(evt, function(){ 
       if(!evtArr[evt][id]){ 
        evtArr[evt][id] = true; 
        google.maps.event.trigger(inner, evt); 
        evtArr[evt][id] = false 

       } 

      }) 

      inner.addListener(evt, function(){ 
       if(!evtArr[evt][id]){ 
        evtArr[evt][id] = true; 
        google.maps.event.trigger(outer, evt); 
        evtArr[evt][id] = false 
       } 
      }) 
     }) 

    }, 

我希望這能夠觸發鼠標按下事件都標記,這樣當我點擊了,我可以在同一時間拖動這兩個標記。現在它的工作方式是,當我在兄弟標記上觸發mousedown事件時,停止第一個mousedown事件。

我也在想,我可以開個單獨的事件,不會干擾第一個。這可能需要一點深思熟慮,但我認爲我可以讓它工作。我只是希望其他人能夠就此提供一些見解。

回答

1

我解決了這個問題。我決定在拖動事件中獲取第一個標記的位置,然後將第二個標記的位置設置爲第一個標記的位置,而不是發出兩個mousedown事件。像這樣。

addDragListener: function(marker, id, centerMarker) { 
     var self = this; 
     var fill = centerMarker; 


     marker.addListener('drag', function(){ 
      var position = marker.getPosition(); 
      fill.setPosition(position); 

     }) 
    }