如何检测长按谷歌地图标记
How to detect long press on Google maps markers?
我猜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
}
}
相关文章:
- 谷歌地图固定位置覆盖
- 不显示带有本地json文件数据的谷歌地图脚本
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 谷歌地图标记不会显示
- 无法在JS中显示谷歌地图
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 在谷歌地图上获取事件的x,y坐标
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 模拟谷歌地图中的点击
- 如何知道哪个标记被谷歌地图点击了
- 谷歌地图JS API+JSON-多个标记没有显示
- 缓存谷歌地图数据
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在谷歌地图上绘制位置数据库
- 标记的实时更新,无需加载页面谷歌地图API V3
- 可以't计算自定义谷歌地图的js
- 谷歌地图可以't添加正确的标记ID
- 如何更改角度谷歌地图上的集群图标
- 谷歌地图v3标记没有显示ie8和9