Touchstart/touchendは、ほとんどのデスクトップブラウザーでまだサポートされていません。 (すべてのブラウザーでサポートされている)mousedownイベントと同じになるtouchstartイベントを作成するにはどうすればよいですか?.
このようなものが欲しい
$('obj').bind('touchstart', function(e){
});
に翻訳されます
$('obj').bind('mousedown', function(e){
})
両方を同時にバインドできます...
$('obj').bind('touchstart mousedown', function(e){
});
mousedown
イベントを自動的に発生させる場合は、touchstart
イベントを自動的に起動します(したがって、touchstart
をバインドするだけで済みます)。
$(document).bind('mousedown', function(event) {
$(event.target).trigger('touchstart');
});
これは、カスタムmousedown
イベントがトリガーされる前に、document
イベントがtouchstart
に伝播する必要があることに注意してください。これにより、予期しない副作用が発生する可能性があります。
次のようなものを試してください:
var clickEventType = ((document.ontouchstart!==null)?'click':'touchstart');
$('obj').bind(clickEventType, function(e){});
さらに良いことに、バインディングには.on()を使用します。
$('body').on(clickEventType, 'obj', function(e){});
これはドキュメントをチェックして、touchstartが存在するかどうかを確認します。存在する場合、イベントは 'touchstart'で、存在しない場合(ほとんどのデスクトップブラウザー)は 'touch'です。
同じイベントタイプを使用してトリガーすることもできます。
$('obj').trigger(clickEventType);
それは最も良い解決策ではありませんが、私が今までに見つけた最善の解決策です。没落?最初のタッチが起こった後でのみ機能するため、同期的に使用することはできません:(
_ var isTouch = false;
$('body').on('touchstart', function () {
isTouch = true;
});
_
たとえば、modernizrを使用して、ブラウザが最初にタッチをサポートしているかどうかを確認することもできます。
グローバルスコープでは使用しないでください(使用する必要がない限り)。また、_isTouch = true
_コードの後に$('html').addClass('is-touch-device')
を追加することで、Htmlタグにis-touch-deviceクラスを追加することで、modernizrに変更することもできます。この場合、どこからでも(cssからも)参照できます。