2012-02-22 12 views
15

ほとんどのデスクトップブラウザでは、touchstart/touchendはまだサポートされていません。どのようにしてmousedownイベント(すべてのブラウザでサポートされている)と同じになるタッチスタートイベントを作成できますか?jquery touchstart in browser

私はこの

$('obj').bind('touchstart', function(e){ 
}); 

のようなものは、あなたがmousedownイベントにしたい場合は...一度

$('obj').bind('touchstart mousedown', function(e){ 
}); 

をの両方に結合することができます

$('obj').bind('mousedown', function(e){ 
}) 

答えて

24

に翻訳されたいですtouchstartイベントが自動的に発生します(したがって、touchstart)これはカスタムtouchstartイベントがトリガされる前にmousedownイベントはdocumentに伝播しなければならないことを意味していること...

$(document).bind('mousedown', function(event) { 
    $(event.target).trigger('touchstart'); 
}); 

注意を使用しています。これは予期せぬ副作用があります。あなたのイベント、その後、touchstartが存在する場合はそれがない場合

$('body').on(clickEventType, 'obj', function(e){}); 

このチェック文書は、参照してください:結合のために)(.on使用し、いっその

var clickEventType = ((document.ontouchstart!==null)?'click':'touchstart'); 

$('obj').bind(clickEventType, function(e){}); 

+3

これらのソリューションは、ある時点で両方のイベントがsaによってサポートされていれば少し問題になるかもしれません私のデバイス。 – epeleg

+0

@epeleg間違いなく。その場合、 '' ontouchstart ''のようなコードをドキュメント内に置いておき、それに応じてイベント名を選択してください。 – alex

+0

おそらく 'if(Modernizr.touchstart){}'のようなものが適切でしょうか? – philtune

7

このような何かを試してみてくださいそれが(ほとんどのデスクトップブラウザ)しない場合は、 'クリックスタート'( 'touchstart')です。

また、同じイベントタイプを使用してトリガすることができます。

$('obj').trigger(clickEventType); 
+0

私もGist-ifiedしましたので、すべてをコピー&ペーストできます:https://gist.github.com/esteinborn/9398782 –

1

それは素敵な解決策ではないのですが、私は今まで発見された最良。倒れ?それだけで最初のタッチは非常にあなたが同期に使用することはできませんが起こった後に動作します:(

var isTouch = false; 
$('body').on('touchstart', function() { 
    isTouch = true; 
}); 

あなたはまた、例えばmodernizrとの最初の場合は、ブラウザのサポートtouchを確認することができます。

グローバルスコープでそれを使用しないようにしてください(コード:$('html').addClass('is-touch-device')の後に追加することで、Htmlタグにis-touch-deviceクラスを追加することで、それをmodernizrに変更することもできます。この場合、どこからでも参照できます(cssからも)