当存在叠加层时触发谷歌地图中的dblclick

时间:2011-11-22 21:47:27

标签: javascript jquery google-maps-api-3

当我在其上有一个圆形覆盖时触发the_map 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)
})

任何人都可以帮忙吗?或描述它为什么不起作用?

3 个答案:

答案 0 :(得分: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;

默认值为300毫秒,这是我发现效果最好的。您可以通过将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);
            }

        });
    })()
};

答案 1 :(得分:0)

根据dblclick事件的Google Map API:

  

在地图上双击完成后会触发此事件。 <强>通知   如果双击是在标记上,则不会触发此事件   或其他可点击的叠加。点的地理坐标   双击的是在latlng参数中传递的。叠加层   参数始终设置为null。


注意: 上面的链接和摘要是针对v2文档的,但同样适用于v3 here;如果向下滚动到dblclick事件:

  

单击MouseEvent当用户单击地图时会触发此事件   (但不是当他们点击标记或信息窗口时)。

     

dblclick MouseEvent当用户双击时会触发此事件   地图。 请注意,点击事件也会在此之前触发   之一。

答案 2 :(得分:0)

只需将圈子可点击选项设置为false。

Google Maps V3 - Circle Options