現在、ダブルクリック イベントをキャッチし、コードを起動してマップ上にウェイポイントを設定するマップがあり、うまく機能します。
私が本当にやりたいのは、タブレット/モバイルユーザーの長押しを検出することです.ダブルクリック方法(私のiPadでは正常に動作しています)は、マウスポインターの場合ほど正確ではないと思います. どうにかしてonmousedown/onmouseupに結び付けてタイマー/しきい値を設定する必要があると思いますが、このようなものを機能させるのに苦労しています。
現在、ダブルクリック イベントをキャッチし、コードを起動してマップ上にウェイポイントを設定するマップがあり、うまく機能します。
私が本当にやりたいのは、タブレット/モバイルユーザーの長押しを検出することです.ダブルクリック方法(私のiPadでは正常に動作しています)は、マウスポインターの場合ほど正確ではないと思います. どうにかしてonmousedown/onmouseupに結び付けてタイマー/しきい値を設定する必要があると思いますが、このようなものを機能させるのに苦労しています。
古い質問ですが、私はこれに少し苦労したので、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 以降でテスト済み
このコードを試してください:
$(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;
});
});