Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在openlayers地图上检测长按_Javascript_Jquery_Openlayers - Fatal编程技术网

Javascript 在openlayers地图上检测长按

Javascript 在openlayers地图上检测长按,javascript,jquery,openlayers,Javascript,Jquery,Openlayers,我有一个地图,目前捕捉双击事件,并发射一些代码,以设置地图上的航路点,这是伟大的作品 我真正想做的是检测平板电脑/手机用户的长按,因为我认为双击方法(在我的ipad上运行良好)不如鼠标指针精确。我假设我必须以某种方式连接到onmousedown/onmouseup并设置一个计时器/阈值,但我正在努力使类似的东西工作 请尝试以下代码: $(document).ready(function () { var longpress = false; $("button").on('cl

我有一个地图,目前捕捉双击事件,并发射一些代码,以设置地图上的航路点,这是伟大的作品

我真正想做的是检测平板电脑/手机用户的长按,因为我认为双击方法(在我的ipad上运行良好)不如鼠标指针精确。我假设我必须以某种方式连接到onmousedown/onmouseup并设置一个计时器/阈值,但我正在努力使类似的东西工作

请尝试以下代码:

$(document).ready(function () {
    var longpress = false;

    $("button").on('click', function () {
        (longpress) ? alert("Long Press") : alert("Short Press");
    });

    var startTime, endTime;
    $("button").on('mousedown', function () {
        startTime = new Date().getTime();
    });

    $("button").on('mouseup', function () {
        endTime = new Date().getTime();
        longpress = (endTime - startTime < 500) ? false : true;
    });
});
$(文档).ready(函数(){
var longpress=false;
$(“按钮”)。在('click',函数(){
(长按)?警报(“长按”):警报(“短按”);
});
var startTime,endTime;
$(“按钮”)。在('mousedown',函数(){
startTime=新日期().getTime();
});
$(“按钮”)。在('mouseup',函数(){
endTime=newdate().getTime();
longpress=(endTime-startTime<500)?false:true;
});
});

老问题-但由于我有点纠结于此,我想我会为通过谷歌搜索的人分享答案

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);
     });
}
上述警报将在1000毫秒后触发。更改waitFor值以确定用户按地图的时间

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

希望这对别人有帮助


这不是与openlayers相关的答案。