यह पूरी तरह से स्पष्ट नहीं है कि आपका प्रश्न क्या है, लेकिन यदि आप माउस के लिए होवर प्रभाव को बनाए रखते हुए डबल क्लिक को समाप्त करना चाहते हैं, तो मेरी सलाह यह है:
- पर मंडराना प्रभाव जोड़ें
touchstart
और mouseenter
।
- पर हॉवर प्रभाव निकालें
mouseleave
, touchmove
और click
।
पृष्ठभूमि
एक माउस को अनुकरण करने के लिए, वेबकिट जैसे ब्राउज़र निम्न घटनाओं को आग लगाते हैं यदि कोई उपयोगकर्ता टच स्क्रीन (आईपैड) की तरह एक उंगली को छूता है और जारी करता है (स्रोत: HTML5rocks.com पर टच और माउस ):
touchstart
touchmove
touchend
- 300ms देरी, जहां ब्राउज़र सुनिश्चित करता है कि यह एक एकल नल है, न कि एक डबल टैप
mouseover
mouseenter
- नोट : यदि कोई
mouseover
, mouseenter
या mousemove
ईवेंट पृष्ठ सामग्री को बदलता है, तो निम्न ईवेंट को कभी भी निकाल नहीं दिया जाता है।
mousemove
mousedown
mouseup
click
यह संभव नहीं लगता कि केवल वेबब्रोसर को माउस घटनाओं को छोड़ दें।
क्या खराब है, अगर कोई माउसओवर ईवेंट पृष्ठ सामग्री को बदलता है, तो क्लिक इवेंट को कभी भी निकाल नहीं दिया जाता है, जैसा कि सफारी वेब कंटेंट गाइड - हैंडलिंग इवेंट , विशेष रूप से 6.4 में वन-फिंगर इवेंट्स पर बताया गया है। । वास्तव में "सामग्री परिवर्तन" क्या है, ब्राउज़र और संस्करण पर निर्भर करेगा। मैंने पाया है कि iOS 7.0 के लिए, सामग्री परिवर्तन में पृष्ठभूमि रंग में परिवर्तन (या नहीं है?) है।
समाधान समझाया
संक्षेप में दुहराना:
- पर मंडराना प्रभाव जोड़ें
touchstart
और mouseenter
।
- पर हॉवर प्रभाव निकालें
mouseleave
, touchmove
और click
।
ध्यान दें कि कोई कार्रवाई नहीं है touchend
!
यह स्पष्ट रूप से माउस की घटनाओं के लिए काम करता है: mouseenter
और mouseleave
(थोड़ा सुधार संस्करणों mouseover
औरmouseout
) निकाल दिया जाता है, और जोड़ सकते हैं और मंडराना को हटा दें।
यदि उपयोगकर्ता वास्तव में click
एक लिंक है, तो हॉवर प्रभाव भी हटा दिया जाता है। यह सुनिश्चित करता है कि यदि उपयोगकर्ता वेब ब्राउज़र में बैक बटन दबाता है तो इसे हटा दिया जाता है।
यह स्पर्श घटनाओं के लिए भी काम करता है: touchstart
होवर पर प्रभाव जोड़ा जाता है। इस पर '' 'नहीं' '' हटा दिया जाता है touchend
। इसे फिर से जोड़ा जाता है mouseenter
, और इस कारण से कोई सामग्री परिवर्तन नहीं होता है (यह पहले से ही जोड़ा गया था), click
घटना भी निकाल दी जाती है, और उपयोगकर्ता को फिर से क्लिक करने की आवश्यकता के बिना लिंक का पालन किया जाता है!
एक touchstart
घटना के बीच एक ब्राउज़र में 300ms की देरी होती है और click
वास्तव में इसे अच्छे उपयोग में लाया जाता है क्योंकि इस कम समय के दौरान होवर प्रभाव दिखाया जाएगा।
यदि उपयोगकर्ता क्लिक को रद्द करने का निर्णय लेता है, तो उंगली की एक चाल सामान्य रूप से ऐसा करेगी। आम तौर पर, यह एक समस्या है क्योंकि किसी भी mouseleave
घटना को निकाल नहीं दिया जाता है, और होवर का प्रभाव बना रहता है। शुक्र है, यह आसानी से होवर प्रभाव को हटाकर तय किया जा सकता है touchmove
।
बस!
ध्यान दें कि FastClick लाइब्रेरी का उपयोग करते हुए, उदाहरण के लिए, 300ms देरी को दूर करना संभव है , लेकिन यह इस प्रश्न के दायरे से बाहर है।
वैकल्पिक समाधान
मैंने निम्नलिखित विकल्पों के साथ निम्नलिखित समस्याएं पाई हैं:
- ब्राउज़र का पता लगाना: त्रुटियों के लिए अत्यधिक संभावना। मान लेता है कि किसी डिवाइस में माउस या टच है, जबकि दोनों का संयोजन अधिक से अधिक सामान्य हो जाएगा जब टच प्रोलिफिरेट प्रदर्शित करता है।
- सीएसएस मीडिया का पता लगाना: केवल सीएसएस-एकमात्र समाधान जिससे मैं अवगत हूं। अभी भी त्रुटियों की संभावना है, और अभी भी मानता है कि एक उपकरण में माउस या स्पर्श है, जबकि दोनों संभव हैं।
- क्लिक इवेंट का अनुकरण करें
touchend
: यह गलत तरीके से लिंक का अनुसरण करेगा, भले ही उपयोगकर्ता केवल लिंक को स्क्रॉल या ज़ूम करना चाहता हो, वास्तव में लिंक पर क्लिक किए बिना।
- माउस घटनाओं को दबाने के लिए एक चर का उपयोग करें: यह
touchend
उस चर को सेट करता है जो उस समय में राज्य परिवर्तनों को रोकने के लिए बाद की माउस घटनाओं में एक इफ-शर्त के रूप में उपयोग किया जाता है। क्लिक इवेंट में वैरिएबल रीसेट हो जाता है। यह एक अच्छा समाधान है यदि आप वास्तव में स्पर्श इंटरफेस पर एक हॉवर प्रभाव नहीं चाहते हैं। दुर्भाग्य से, यह तब काम नहीं करता है जब किसी touchend
अन्य कारण से निकाल दिया जाता है और कोई क्लिक इवेंट निकाल दिया जाता है (उदाहरण के लिए उपयोगकर्ता स्क्रॉल या ज़ूम किया हुआ), और बाद में माउस के साथ लिंक का अनुसरण करने की कोशिश कर रहा है (यानी माउस और टच इंटरफ़ेस वाले डिवाइस पर) )।
आगे की पढाई
आईपैड / आईफोन डबल क्लिक की समस्या भी देखें और मोबाइल ब्राउज़रों पर होवर को अक्षम करें ।