2012-02-22 17 views
15

Masaüstü tarayıcıların çoğunda touchstart/touchend henüz desteklenmemektedir. Mousedown olayıyla aynı olacak touchstart olayını nasıl oluşturabilirim (tüm tarayıcılarda desteklenir).Tarayıcıda jquery touchstart

Ben

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

Eğer mousedown olay istiyorsanız ... Bu

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

gibi bir şey tek seferde hem bağlayabilir

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

cevap

24

çevrilecek istiyorum touchstart olaylarını otomatik olarak tetikle (böylece'ye bağlamanız yeterlidir)) kullanmak ...

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

Not bu mousedown olaylar touchstart olay tetiklenebilir özel önce document yaymak gerekir demektir. Bu beklenmedik yan etkilere sahip olabilir. Etkinlik daha sonra touchstart varsa eğer olursa

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

Bu kontroller belge, görmek: bağlanma için) (.sistem kullanın iyisi

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

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

:

+3

Bu çözümlerin her iki olayın da desteklenmesi durumunda, bu çözümler biraz problemli olabilir. cihazım – epeleg

+0

@epeleg Kesinlikle. Bu durumda, belgede '' ontouchstart '' veya benzeri bir kodunuz olur ve daha sonra buna göre etkinlik isminizi seçin. – alex

+0

Belki de (Modernizr.touchstart) {} 'gibi bir şey uygun olurdu? – philtune

7

Böyle bir şey deneyin 'touchstart' ise (çoğu masaüstü tarayıcıda) 'click' yazıyorsa. En güzel çözüm değil

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

Ayrıca her şeyi kopyalayıp yapıştırabilmenizi sağladım: https://gist.github.com/esteinborn/9398782 –

1

ama şimdiye kadar bulunan en iyi:

Ayrıca aynı olay türünü kullanarak tetikleyebilir. Düşüşünü? İlk dokunuş böylece eşzamanlı kullanamazsınız :(

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

da kontrol edebilirsiniz örneğin modernizr ilk tarayıcı desteği dokunuş.

küresel kapsamda kullanmayın yapmak unutmayın if (oldu sonra sadece çalışır Olmak zorunda değilsiniz. Ayrıca, isTouch = true kodunu ekleyerek HTML-etiketine is-touch-device sınıfını ekleyerek modernizr "alike" olarak da değiştirebilirsiniz: $('html').addClass('is-touch-device') Bu durumda her yerden (css'den de) referans alabilirsiniz.

İlgili konular