2011-11-22 26 views
0

我有一個觸發the_map dblclick事件的問題,當我有一個圓覆蓋它。當覆蓋圖存在時觸發谷歌地圖中的dblclick

google.maps.event.addListener(the_map, 'dblclick', function(myEvent) { 
    // do something 
} 

我已將下面的代碼添加到circle.polygon對象,但它不起作用。

google.maps.event.addListener(this.polygon, 'dblclick', function(myEvent) { 
    $(this.map).trigger('dblclick', myEvent) 
    // or 
    $(this.map).dblclick(myEvent) 
}) 

任何人都可以幫忙嗎?或者描述爲什麼它不起作用?

+0

我沒有用過谷歌地圖API的多,沒有心情來建立一個例子,但我可以幫你提供我能診斷它的問題的一個例子的jsfiddle。在我腦海中出現的第一個問題是,當你雙擊它(做一個警報)時,多邊形上的'dblclick'事件甚至會被解僱?第二個是如果它不檢查單個'click'事件是否執行。如果是的話,您可以通過計算用戶點擊的次數來進行模擬dblclick事件,並且如果它在某個時間段內變白,則可以點擊兩次,然後調用地圖的dblclick事件。 –

+0

添加了答案。 – iambriansreed

回答

0

據谷歌地圖API的dblclick事件:

當雙擊在地圖上做此事件被觸發。 注意 如果雙擊是在標記 或其他可點擊的疊加上,則此事件不會被解僱。雙擊的點 的地理座標在latlng參數中傳遞。覆蓋 參數始終設置爲空。


注:以上 該鏈接並總結是爲v2的文檔,但同樣適用於V3 here;如果您向下滾動到dblclick事件:

點擊的MouseEvent(當他們點擊一個標記或信息窗口但不是)這個事件,當用戶點擊地圖上 解僱。

dblclick MouseEvent當用戶雙擊地圖上的 時,會觸發此事件。 請注意,點擊事件也會觸發,在此之前 之一。

+1

-1我可以讀取toturials。你不回答我的問題 – wtayyeb

+0

對不起@jeffwilbert,我與wtayyeb aggree,這個答案根本沒有答覆。它甚至可能最終會被一些熱心的用戶降低。 –

1

我在查找相同的答案時遇到了這篇文章。我找不到一個,所以我爲後人添加了我的解決方案。

以下是一個自我安裝類,它執行雙擊和單擊,無論地圖上是否存在疊加層。

map_click._single(function(event){   
    console.log(event);   
}); 

等同於:

google.maps.event.addListener(map, 'click', function(event) {   
    console.log(event); 
}); 

而對於雙擊...

map_click._double(function(event){   
    console.log(event);   
}); 

等同於:

google.maps.event.addListener(map, 'dblclick', function(event) {   
    console.log(event); 
}); 

如果你想設置雙點擊延遲你可以像編輯它:

map_click.delay = 300; 

默認值是300ms,這是我發現最好的。通過將map_click.delay設置爲0,可以有效地消除雙擊事件。

終於功能:

window.map_click = { 
    i : 0 
    ,_single : function(fn){ 
     if(typeof(fn) != 'function') return; 
     this.singles = this.singles || []; 
     this.singles.push(fn); 
    } 
    ,_double : function(fn){ 
     if(typeof(fn) != 'function') return; 
     this.doubles = this.doubles || []; 
     this.doubles.push(fn); 
    } 
    ,delay : 300 
    ,_ : (function(){ 
     google.maps.event.addListener(map, 'dblclick', function(event) { 
      if(map_click.timeout) clearTimeout(map_click.timeout); 
      map_click.i = 0; 
      for(_ in map_click.doubles) 
       map_click.doubles[_](event); 
     }); 
     google.maps.event.addListener(map, 'click', function(event) { 
      map_click.i++; 
      map_click._event = event; 
      if(map_click.timeout) clearTimeout(map_click.timeout); 
      if(!(map_click.i%2)){ 
       map_click.i = 0; 
       for(_ in map_click.doubles) 
        map_click.doubles[_](event);  
      }else{ 
       map_click.timeout = setTimeout(function(){ 
        map_click.i = 0; 
        for(_ in map_click.singles) 
         map_click.singles[_](map_click._event); 
       }, map_click.delay); 
      } 

     }); 
    })() 
};