我在查找相同的答案時遇到了這篇文章。我找不到一個,所以我爲後人添加了我的解決方案。
以下是一個自我安裝類,它執行雙擊和單擊,無論地圖上是否存在疊加層。
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);
}
});
})()
};
我沒有用過谷歌地圖API的多,沒有心情來建立一個例子,但我可以幫你提供我能診斷它的問題的一個例子的jsfiddle。在我腦海中出現的第一個問題是,當你雙擊它(做一個警報)時,多邊形上的'dblclick'事件甚至會被解僱?第二個是如果它不檢查單個'click'事件是否執行。如果是的話,您可以通過計算用戶點擊的次數來進行模擬dblclick事件,並且如果它在某個時間段內變白,則可以點擊兩次,然後調用地圖的dblclick事件。 –
添加了答案。 – iambriansreed