如何检测长按谷歌地图标记

How to detect long press on Google maps markers?

本文关键字:谷歌 地图 图标 何检测 检测      更新时间:2023-09-26

我猜Google地图没有长按/轻按事件处理程序。下面的代码是实现这一点的一种方式吗?

我使用鼠标上下事件监听器实现了长按功能。谢谢! !

var longpress = false;
        
google.maps.event.addListener(marker,'click', function (event) {
    (longpress) ? console.log("Long Press") : console.log("Short Press");
});
        
google.maps.event.addListener(marker, 'mousedown', function(event){
    start = new Date().getTime();           
});
        
google.maps.event.addListener(marker, 'mouseup', function(event){
    end = new Date().getTime();
    longpress = (end - start < 500) ? false : true;         
});

我知道这是一个旧的帖子,但我遇到了同样的问题,我发现了一个我认为比@Anbarasan Thangapalam建议的更好的解决方案。

解决方案:

var mousedUp = false;
google.maps.event.addListener(marker, 'mousedown', function(event){ 
    mousedUp = false;
    setTimeout(function(){
        if(mousedUp === false){
            //do something if the mouse was still down
            //after 500ms        
        }
    }, 500);
});
google.maps.event.addListener(marker, 'mouseup', function(event){ 
    mousedUp = true;
});

我认为这种方法可能更容易理解,代码行更少,侦听器函数更少。

为了避免在拖动事件上触发超时函数,只需复制 mouseup 函数并将其更改为 dragstart 。像这样:

google.maps.event.addListener(marker, 'dragstart', function(event){ 
    mousedUp = true;
});

我通过Rafaelmorais实现了这个解决方案(使用拖动侦听器),但我认为触发标志的第一个声明"mousedUp"应该是真的。我更改了触发器变量(也将其重命名为更直观),它工作了。

一些注意事项供参考…

释放长按事件后,还会触发一个单击事件(如果设置了单击侦听器)。为了防止双重事件,你可以在点击监听器中使用(!longPressed)来抑制点击事件的运行(如果你想的话)。

我清除了超时,以防止奇怪的情况下,该函数检查回看longPressActive是否仍然为真,它已被取消设置/重置,仍然触发事件。

任何鼠标按钮触发Mousedown事件(与触摸事件无关)。

不需要拖拽,因为拖拽会清除超时

var longPressTimeout = null;
var longPressActive = false;
var longPressed = false;
google.maps.event.addListener(marker, 'mousedown', function(event){
    longPressActive = true;
    longPressed = false;
    longPressTimeout = setTimeout(function(){
        if(longPressActive === true){
            console.log("Long Press")
            longPressed = true;
            //do something after marker long pressed for 1000ms
        }
    }, 1000);
});
google.maps.event.addListener(marker, 'mouseup', function(event){
    clearTimeout(longPressTimeout); 
    longPressActive = false;
});
google.maps.event.addListener(marker, 'dragstart', function(event){
    clearTimeout(longPressTimeout); 
    longPressActive = false;
});

(我把这个作为一个解决方案,因为我还没有足够的代表来评论)

对我来说,下面的方法有效。要查看它是rightclick还是longPress,只需检查事件类型是否在处理程序中为"contextmenu"。

gMaps.event.addListener(overlay, 'click', function() {
    if(event.type === "contextmenu"){
     //longpress handler codes
    }
}