प्रसंग: MobileSafari/iPad पर वेब एप्लिकेशन, दोनों पूर्ण-स्क्रीन और iframe में एम्बेडडिफ़ॉल्ट रोकें प्रेस लेकिन डिफ़ॉल्ट नहीं आईओएस मोबाइलसाफरी में खींचें?
लक्ष्य: तकनीक है कि प्रेसके लिए कस्टम ईवेंट हैंडलर्स प्रदान करता है और नल लेकिन नहींचुटकी (ज़ूम) या खींचें (स्क्रॉल/पैन)। हम प्रेस के लिए कस्टम व्यवहार प्रदान करना चाहते हैं, लेकिन सफारी को अभी भी स्क्रॉल/पैन/ज़ूम को संभालने दें।
समस्या: दो लक्ष्य पारस्परिक रूप से अनन्य प्रतीत होते हैं। प्रेस इशारा के लिए डिफ़ॉल्ट व्यवहार को रोकने के लिए, event.preventDefault को ontouchstart के तत्काल प्रतिक्रिया में बुलाया जाना चाहिए। हालांकि, डिफ़ॉल्ट व्यवहार को ड्रैग पर आगे बढ़ने के लिए, हमें प्रारंभिक ऑनटचस्टार्ट पर event event.preventDefault पर कॉल करना होगा। एक बार रोकथाम डीफॉल्ट कहलाता है, उस इशारा अनुक्रम के दौरान डिफ़ॉल्ट व्यवहार वापस पाने का कोई तरीका नहीं है (यानी जब तक सभी उंगलियां बंद नहीं होतीं)। खींचें तब तक पहचाना नहीं जाता जब तक कि कुछ आंदोलन न हो।
ड्रैग को सबसे सरल उदाहरण के रूप में चित्रित किया गया है, लेकिन हम पिंच और डबल-टैप के लिए भी डिफ़ॉल्ट व्यवहार प्राप्त करने की परवाह करते हैं। हम "छवि कॉपी करें" या टेक्स्ट का चयन करने के डिफ़ॉल्ट मोबाइलसाफरी प्रेस व्यवहार को कभी नहीं चाहते हैं।
प्रयास अब तक:
- ontouchstart घटना सेव करें और, एक timeout के बाद, बाद में उस पर preventDefault फोन (बस से पहले प्रेस मान्यता प्राप्त हो जाएगा)। कोई प्रभाव नहीं।
- 'oncontextmenu' के लिए सुनो। नहीं, डिफ़ॉल्ट घटना व्यवहार को इस घटना के माध्यम से संकेतित या रूट नहीं किया जा रहा है।
- हमारे सभी ऑनचouch * हैंडलर में डिफ़ॉल्ट को रोकें, और फिर जब हम ड्रैग/पिंच इशारा पहचानते हैं, तो initTouchEvent और/या initGestureEvent का उपयोग करके नई घटनाओं का अनुकरण करें। प्रोग्रामेटिक रूप से बनाई गई घटनाओं ने को हमारे कॉलबैक पर हिट किया, लेकिन सफारी उन्हें कोई ध्यान नहीं दे रहा है, कोई डिफ़ॉल्ट व्यवहार ट्रिगर नहीं कर रहा है।
- नकली चाल के साथ सफारी की प्रेस पहचान को तोड़ दें। सफारी थोड़ी सी चाल पर एक प्रेस रद्द कर देता है, लेकिन हम थोड़ी-थोड़ी ढलान की अनुमति देते हैं। ऑनटचस्टार्ट के बाद एक चाल घटना (ऊपर के रूप में) को सिम्युलेट करना सफारी को पहचानने में विफल होने का कारण नहीं बनता है, अगर उंगली "असली के लिए" नहीं ले जाती है।
हमारे पास एप्पल के native iOS gesture recognizers की शैली में लागू जेस्चर पहचानकर्ताओं (जावास्क्रिप्ट, ऑनटच * में) का एक पूर्ण रूप से प्रदर्शित सेट है। हमें किसी भी इशारे को पहचानने में कोई समस्या नहीं है, हम केवल ज़ूम/पैन/डबल-टैप व्यवहार को दोहराने के लिए एक अच्छा तरीका नहीं जानते हैं, जिसे सफारी मुफ्त में प्रदान करता है।
हमें कोड की आवश्यकता नहीं है; हम किसी भी सैद्धांतिक समाधान की तलाश में हैं ("पैन/ज़ूम खुद को भी लागू करें" से परे, हालांकि यदि आपके पास रुचि रखने का एक आसान तरीका है तो हम उचित सफलता प्राप्त करते हैं। हम ऐसा करने के अन्य समान प्रयासों के बारे में सीखने में भी रुचि रखते हैं - निश्चित रूप से हम इस को आजमाने वाले पहले व्यक्ति नहीं हो सकते हैं?
वैकल्पिक टीएल; डीआर: क्या टचस्टार्ट के अलावा डिफ़ॉल्ट प्रेस (जिसे टैप-एंड-होल्ड भी कहा जाता है) को रोकने के लिए कोई तरीका है?