2014-02-13 43 views
4

我想讓用戶在我的地圖上按控制鍵並點擊標記,選擇多個標記。處理Ctrl +點擊Google地圖

這樣做,我寫這樣的代碼:

google.maps.event.addListener(marker, 'click', function (e) { 
    // detect if is pressed ctrlKey or not to do stuff 
} 

在谷歌地圖V3 docs沒有信息或文檔中關於此e對象,超越latLng財產。 但是,當我使用谷歌瀏覽器進行調試時,我看到這個包含我需要的東西的Ra對象。 我的問題是,如果按下ctrlKey,可以安全地對這個無證的Ra訪問進行硬編碼獲取?

enter image description here

+2

有關於[的MouseEvent(https://developers.google.com/maps/documentation/javascript/reference#MouseEvent)的大量信息API文檔。任何沒有證件的東西都不應該被認爲是安全的。未來的API更新可以在沒有事先警告的情況下刪除或修改那些未公開的對象 – duncan

+0

究竟「究竟是我需要什麼」? 'Ra'大部分時間都是未定義的。 – davidkonrad

回答

7

正如評論問,什麼包含Ra這一點很重要?我的經驗是,谷歌地圖不斷改變這些內部變量/對象的名稱。


然而,做了一個演示,展示如何通過舉辦CTRL下來,點擊標記選擇多個標記:

見小提琴 - >http://jsfiddle.net/FbGa5/
注意:您必須在ctrl之前單擊地圖來激活iframe,或者可以捕獲任何其他按鍵。在CTRL關鍵的

跟蹤:

var selecting = false, 
    selectedMarkers = []; 

window.onkeydown = function(e) { 
    selecting = ((e.keyIdentifier == 'Control') || (e.ctrlKey == true)); 
} 
window.onkeyup = function(e) { 
    selecting = false; 
} 

選擇標記,如果CTRL - 鍵是向下,並在單擊標記。如果選擇了一個標誌,它會變成藍色,如果一個標誌被取消選擇它變回紅色:

google.maps.event.addListener(marker, 'click', function() { 
    if (!selecting) return; 
    var id = this.id; 
    var index = selectedMarkers.indexOf(id); 
    if (index>-1) { 
    this.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/red-dot.png'); 
    selectedMarkers.splice(index, 1); 
    } else { 
    selectedMarkers.push(id);    
    this.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png'); 
    } 
}); 

結論:你不需要Ra或者爲了得到它的標記點擊事件的任何其他參數工作。

+0

謝謝你這個人!爲了澄清,我知道可能'Ra'將是一個「幽靈」對象,那是因爲我問了。對於「正是我所需要的」,我必須說,在這個對象內部是一個標誌'ctrlKey',這將幫助我很多。 –

+0

@AgustinMeriles - 不客氣!現在我明白了。試圖監測各種事件的Ra,幾乎總是似乎沒有定義。 – davidkonrad

+0

@AgustinMeriles,我做了一個小小的代碼更新和一個小提琴。在FireFox中沒有正確檢測到ctrl鍵,現在已經解決了這個問題。還用Opera進行測試。 – davidkonrad

1

我猜測因爲縮小而改變了班級成員。 我的想法,我知道是不完美的,是尋找類型 而不是名稱的MouseEvent。然後,當發現給它一個恆定的名字,你知道

google.maps.event.addListener(marker, 'click', function (e) { 
    // detect if is pressed ctrlKey or not to do stuff 

    //detect the mouse event member by type 
    //and always give it the name "mouseEvent"   
    for (var key in e) { 
     if (e[key] instanceof MouseEvent) { 
      e["mouseEvent"] = e[key]; 
      break; 
     } 
    } 

    // e.mouseEvent.ctrlKey .... 

} 
+0

工作完美。謝謝 ! – PlayHardGoPro

+0

它不再工作不知道爲什麼。 'shiftKey'總是返回false。我認爲這與谷歌API有關。 – PlayHardGoPro

+0

嘗試通過在Google API URL中添加版本號來使用固定版本的Google API。 像這樣: https://maps.googleapis.com/maps/api/js?v=3.29 &key = YOUR_API_KEY。 查看更多這裏: https://developers.google.com/maps/documentation/javascript/versions 這將告訴你,如果問題是與某些特定版本的谷歌API或與您的代碼有關 –