TL;DR:
3 つの「タッチ」ブラウザ イベントを遅延と組み合わせて「長押し」イベントをエミュレートし、jQuery が適切な DOM 要素にアタッチできるようにするにはどうすればよいですか?
完全な質問
iPad やその他のタッチスクリーン デバイスは最も確実に touchstart、touchmove、および touchend イベントのみをトリガーすると私は信じているので、ジェスチャ、長押し、および複数のイベントに反応するには、何らかのレベルの複雑さのフレームワークが必要だと思います。触れる。
現在のプロジェクトにモバイル フレームワークの 1 つを追加する準備ができていないので、その目的のために、「長押し」をエミュレートするのに十分に機能すると思われるコードを少し追加しました。定義済みのハンドラーをトリガーするか、そのようなイベント用の追加のハンドラーを追加します。
var touchTimeout = null;
var $element = null;
$('div#SomeIdOnADIVElementOrTwo')
.on('touchstart', function(){
$element = $(this);
//not sure if this is absolutely necessary, but it was based off an Internet resource found when it didn't work like I wanted it to - and it works, so...
touchTimeout = setTimeout(
function($element){
return function(){
$($element).trigger('longpress');
};
}($element), 1000
);
})
.on('touchend touchmove', function(){
clearTimeout(touchTimeout);
})
.on('longpress', function(){
$(this).dblclick();
});
ただし、これは現在、最初の行で元の jQuery omni-function 呼び出しに渡すセレクターまたは jQuery オブジェクト (私の場合は id の div SomeIdOnADIVElementOrTwo
) に制限されています。私がやりたいのは、「touchstart」、「touchmove」、「touchend」の 3 つのイベント (遅延/タイムアウトなどと共に) を、誰かが「タッチ可能」で「処理」できる標準の「イベント」として定義することです。 "DOM オブジェクト。
これは、セレクターを に変更するのと同じくらい簡単*
ですか? これは概念的にはうまくいくと確信していますが、多数の要素を含むページでは管理できない可能性が非常に高いと思わざるを得ません-または、イベントハンドラーがどのように登録されているかについて混乱している可能性がありますか? 関数を使用して jQuery を拡張した方がよいのでしょうか( and関数.longPress()
と同じ流れで)。これは実行不可能または不可能ですか?それは信じられないほど単純で、何かが欠けていますか?.click()
.dblClick()