[英]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;
});
(我将此作为解决方案发布,因为我还没有足够的代表发表评论)
对我来说,以下方法有效。 看它是否是一个rightclick
或longPress
只检查,如果事件类型是“文本菜单”的处理程序中。
gMaps.event.addListener(overlay, 'click', function() {
if(event.type === "contextmenu"){
//longpress handler codes
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.