在openlayers地图上检测长按

Sir*_*rom 2 javascript jquery openlayers

我有一个地图,当前捕获了双击事件并触发了一些代码以在地图上设置航路点,因此效果很好。

我真正想做的是检测平板电脑/移动设备用户的长按,因为我认为双击方法(在ipad上可以正常工作)不如使用鼠标指针精确。我认为我必须以某种方式绑定到onmousedown / onmouseup并设置一个计时器/阈值,但是我正在努力使这种工作正常进行。

use*_*211 5

旧问题-但是由于我为此感到有点挣扎,所以我想我会为那些通过google搜索的人分享答案。

var multiTouchEvent = 0;
var timeoutId;
var waitFor = 1000;
$(document).delegate("#openLayersMapDiv", "pagecreate", function() {
     map.events.register('touchstart', map, function(e) {
         multiTouchEvent = e.touches.length;
         timeoutId = setTimeout(function() {
              if (multiTouchEvent > 1) {
                   clearTimeout(timeoutId);
              }
              else {
                   alert("longpress!!!");
              }
         }, waitFor);
     }, true);

     map.events.register('touchmove', map, function(e) {
         clearTimeout(timeoutId);
     });
     map.events.register('touchend', map, function(e) {
         clearTimeout(timeoutId);
     });
}
Run Code Online (Sandbox Code Playgroud)

上面的警报将在1000毫秒后触发。更改waitFor值,您希望用户按下地图多长时间。

说明:本质上,touchstart事件在等待1000毫秒后(通过setTimeOut函数)触发一个事件。但是,如果用户抬起手指(从而触发touchend事件),则会清除setTimeOut功能。如果用户移动手指(从而触发touchmove事件)或缩放级别发生变化(由multiTouchEvent变量监视),也会发生这种情况。

希望这对某人有帮助。

在Android 4+上测试