繁体   English   中英

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

[英]How to detect long press on Google maps markers?

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

我已经使用鼠标向上和鼠标向下事件侦听器实现了长按功能。 谢谢!!

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 事件触发任何鼠标按钮(与触摸事件无关)。

Dragend 不是必需的,因为 dragstart 清除超时

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;
});

(我将此作为解决方案发布,因为我还没有足够的代表发表评论)

对我来说,以下方法有效。 看它是否是一个rightclicklongPress只检查,如果事件类型是“文本菜单”的处理程序中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM