2012-02-22 21 views
15

चूंकि अधिकांश डेस्कटॉप ब्राउज़र में टचस्टार्ट/टचचेन्ड अभी तक समर्थित नहीं है। मैं टचस्टार्ट ईवेंट कैसे बना सकता हूं जो mousedown ईवेंट के समान होगा (जो सभी ब्राउज़रों में समर्थित है)।ब्राउज़र में jquery touchstart

मैं इस

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

की तरह कुछ

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

उत्तर

24

में अनुवाद किया जाएगा आप एक बार में दोनों बाध्य कर सकते हैं चाहते हैं ...

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

आप mousedown घटना के लिए करना चाहते हैं आग touchstart घटनाएं स्वचालित रूप से (इसलिए आपको केवलबांधना होगा) का उपयोग करें ...

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

नोट इसका मतलब है कि mousedown घटनाओं कस्टम touchstart घटना शुरू किया जा सकता से पहले document के लिए उपलब्ध होने चाहिए। यह अप्रत्याशित साइड इफेक्ट्स हो सकता है। आपके घटना अगर touchstart मौजूद

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

यह जाँच करता है दस्तावेज़ देखने के लिए, अगर यह होता है, तो: बेहतर अभी तक

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

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

,) बंधन के लिए उपयोग .on (:

+3

ये समाधान थोड़ा समस्याग्रस्त साबित हो सकते हैं यदि किसी बिंदु पर दोनों घटनाओं को sa द्वारा समर्थित किया जाएगा मुझे डिवाइस – epeleg

+0

@ निश्चित रूप से @pepeleg। उस स्थिति में, आपके पास दस्तावेज़ 'या समान में' ऑनटचस्टार्ट 'जैसे कुछ कोड होंगे, और उसके बाद अपना ईवेंट नाम तदनुसार चुनें। – alex

+0

शायद कुछ अगर 'if (Modernizr.touchstart) {}' उपयुक्त होगा? – philtune

7

कुछ इस तरह की कोशिश करो 'टचस्टार्ट' है यदि यह नहीं (अधिकांश डेस्कटॉप ब्राउज़र) तो इसके 'क्लिक'।

तुम भी एक ही घटना प्रकार का उपयोग को गति प्रदान कर सकते हैं:

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

मैं भी गस्ट-इफिड किया ताकि आप पूरी चीज को कॉपी और पेस्ट कर सकें: https://gist.github.com/esteinborn/9398782 –

1

यह सबसे अच्छा समाधान नहीं है, लेकिन सबसे अच्छा मैं अब तक नहीं मिला। पतन? यह केवल काम करता है के बाद पहला स्पर्श हुआ तो आप तुल्यकालिक उपयोग नहीं कर सकते :(

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

तुम भी जाँच कर सकते हैं, उदाहरण के लिए modernizr साथ ब्राउज़र समर्थन स्पर्श पहले।

वैश्विक क्षेत्र में इसका इस्तेमाल नहीं करने के लिए याद रखें (जब तक आपको नहीं करना चाहिए)। आप isTouch = true कोड: $('html').addClass('is-touch-device') के बाद जोड़कर एचटीएमएल टैग में आई-टच-डिवाइस क्लास जोड़कर इसे "समान" के रूप में भी बदल सकते हैं। इस मामले में आप इसे हर जगह से संदर्भित कर सकते हैं (सीएसएस से भी)