2013-04-12 86 views
5

我有兩個連接兩個折線的標記。 我有標記和折線上的點擊事件,但我試圖讓折線更容易點擊而不放置新標記或增加它的strokeWeight。 所以我創建了一個圓形圖標並放置在折線上,但我無法使其可點擊。可能嗎?谷歌地圖:clickable polyline圖標

看到這個線程,但沒有給出有關圖標如何點擊的任何細節。我搜索了它的代碼源,但他添加了KML圖層。我不想這樣做。 Google Maps: Attaching events on polyline icons

搜索google maps覆蓋API但沒有找到任何接口來監聽點擊事件。 https://developers.google.com/maps/documentation/javascript/overlays#Polylines

我也嘗試附加一個事件監聽器,但沒有工作。我懷疑這是不能添加一個實際的標記或對象,但如果別人有類似的問題,我將不勝感激任何提示:)

在此先感謝!

我的代碼:

var pathSymbol = { 
    path: google.maps.SymbolPath.CIRCLE, 
    scale: 8, 
    strokeColor: '#228B22' 
}; 

var conPath = new google.maps.Polyline({ 
    path: conCoord, 
     strokeColor: "#228B22", 
     strokeOpacity: 0.7, 
     icons: [{ 
      icon: pathSymbol, 
      offset: '50%' 
     }], 
     strokeWeight: 2 
}); 

conPath.setMap(map); 


google.maps.event.addListener(conPath, 'click', (function(l,conCoord) { 
    return function() { 
      infowindowPath.setContent("<b>Ligação "+connections[l].id); 
     infowindowPath.setPosition(new google.maps.LatLngBounds(conCoord[1], conCoord[0]).getCenter()); 
      infowindowPath.open(map); 
     } 
})(l,conCoord)); 

回答

5

我需要這個功能很好,但不幸的是它是不可能的 - 我幾乎可以肯定(見我demo)。我這麼說的原因是:

  1. 我已經嘗試了許多不同的方式,但只有折線接收
  2. 它沒有明確谷歌的文檔中記錄了事件
  3. 什麼樣的以下部分

    文檔的暗示:

    documentation on Symbols

    一個符號是一個基於矢量的圖像,可以顯示在標記Polyline對象上。

    documenation on the AddEventListener

    addListener(instance:Object, eventName:string, handler:Function)

    添加指定的偵聽器函數在給定對象實例的指定事件名稱。返回可以與removeListener()一起使用的此偵聽器的標識符。

活動可以附着到對象實例(如標記折線)。由於符號是基於矢量的圖像,它們被渲染爲是Polyline,它們包含在其中,而不是正式的Object實例。顯然,這使得他們沒有資格有自己的事件。

現在,我仍然懷疑的是,我上面的理性意味着符號是Polyline的一部分,意味着它應該也會接收到與Polyline相同的事件。然而,在我的考驗,這是不是這種情況(demo here:無論在折線的符號的尺寸,它不接受任何事件):

var mySymbol = { 
    path: google.maps.SymbolPath.CIRCLE, 
    scale: 25, 
    strokeWeight: 5, 
    fillOpacity: .2 
}; 

var myPolyline = new google.maps.Polyline({ 
    icons: [{ 
     icon: mySymbol, 
     fixedRotation: true, 
     offset: '50%', 
    }], 
    path: [polylineCenter, polylineEnd], 
    strokeColor: 'black', 
    strokeOpacity: 1, 
    strokeWeight: 5, 
    map: myMap 
}); 

// works since <myPolyline> is an instance of an Object 
google.maps.event.addListener(myPolyline, 'click', function() { 
    alert('Polyline clicked!'); 
}); 

// doesn't work :-(since <mySymbol> is an Object literal 
google.maps.event.addListener(mySymbol, 'click', function() { 
    alert('Symbol clicked!'); 
}); 
+0

是啊,這是我達到過我最終放棄它的結論。謝謝回答。 –