3

現在、ダブルクリック イベントをキャッチし、コードを起動してマップ上にウェイポイントを設定するマップがあり、うまく機能します。

私が本当にやりたいのは、タブレット/モバイルユーザーの長押しを検出することです.ダブルクリック方法(私のiPadでは正常に動作しています)は、マウスポインターの場合ほど正確ではないと思います. どうにかしてonmousedown/onmouseupに結び付けてタイマー/しきい値を設定する必要があると思いますが、このようなものを機能させるのに苦労しています。

4

2 に答える 2

7

古い質問ですが、私はこれに少し苦労したので、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);
     });
}

上記のアラートは 1000 ミリ秒後に発生します。ユーザーがマップを押し続ける時間の waitFor 値を変更します。

説明: 基本的に、touchstart イベントは、1000 ミリ秒待機した後にイベントを発生させます (setTimeOut 関数を介して)。ただし、ユーザーが指を離すと (touchend イベントが発生すると)、setTimeOut 関数はクリアされます。これは、ユーザーが指を動かした場合 (touchmove イベントが発生した場合) またはズーム レベルが変化した場合 (multiTouchEvent 変数によって監視されている場合) にも発生します。

これが誰かに役立つことを願っています。

Android 4 以降でテスト済み

于 2013-10-22T21:00:58.450 に答える
0

このコードを試してください:

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

デモ

于 2013-03-25T20:17:23.360 に答える