応答性を向上させるために、jQueryライブクリックイベントをjQueryモバイルタップイベントに置き換えました。
これは互換性の理由から悪い考えだと思います。
両方のイベントが必要であり、同じ関数に対して両方を書き込む方法はありますか?
(「クリック」、「タップ」など)
ビリーの答えは信じられないほど完全であり、私が実際に使用した数回はかなりうまくいきました。ただし、 JQuery Mobile でvmouseプラグインを確認することもできます。これは、マウスイベントを抽象化する試みです。
// This plugin is an experiment for abstracting away the touch and mouse
// events so that developers don't have to worry about which method of input
// the device their document is loaded on supports.
- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js
自分が取り組んでいるプロジェクトでそれをいじっていますが、最近はかなり反応がいいようです。使用するには、次のようなもの:
$('selector').bind('vclick', function () { ...
または
$('selector').bind('vmousedown', function () { ...
次のように、1回の呼び出しで複数のイベントをバインドできます。
$('selector').bind('click tap',function(){ ... })
これは一部のブラウザー/モバイルでは問題ないかもしれませんが、タップとクリックの両方をトリガーする一部のデバイスでイベントが2回発生する可能性があります。
何らかのデバイス/機能の検出を行い、このような適切なハンドラーを追加するだけでこれを修正できます...
$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })
さらに、私はtouchstart
とmousedown
を選択する方が良いイベントだと思います。これは、システムが2回目のタッチでダブルクリックしたり、スワイプジェスチャーになったりする可能性があるため、タッチ後、遅延が経過するまでクリックイベントが発生しないためです。 touchstart
イベントはmousedown
と同様に即座に起動するため、応答性が向上します。
その問題を解決する小さなスクリプトを開発しました。それをグローバルレベルで含めるだけで、遅延イベントの問題なくクリックイベントがすぐに発生します。
JQuery mobileにはすでにそれを行うイベントがあるようです:
$(function(){
$('selector').bind('vclick', function(e){
alert('test');
return false;
});
});
JQueryからvmouseプラグインを使用できます。これにより、クリックイベント(モバイルのみ)、およびクリックイベントとタッチイベントの両方がトリガーされる場合の300ミリ秒の遅延が解決されます。
Vmouseプラグインのみを取得するには、 jQuery Mobile Download Builder を使用します。 jQueryの後、このプラグインに依存するスクリプトの前に含めます。
関連するイベントは vclick であり、基本的な使用法は次のとおりです。
$(".selector").on( "vclick", function( event ) {
// To execute
});