2012-02-24 21 views
8

अतीत में, माउस की उपस्थिति की जांच करने का सबसे अच्छा तरीका touch event support को देखना था। हालांकि, डेस्कटॉप क्रोम अब स्पर्श परीक्षणों का समर्थन करता है, जिससे यह परीक्षण मिस्फायर बन जाता है।मैं विश्वसनीय रूप से यह निर्धारित कैसे कर सकता हूं कि कोई ब्राउज़र माउस-ओवर ईवेंट का समर्थन करता है या नहीं?

क्या टच इवेंट की उपस्थिति के आधार पर इसे घुमाने के बजाए माउसओवर इवेंट सपोर्ट के लिए सीधे परीक्षण करने का कोई तरीका है?

संकल्प: AshleysBrain के उत्तर के आधार पर काम किया गया कोड यहां दिया गया है।

jQuery(function() 
{ 
    // Has mouse 
    jQuery("body").one("mousemove", function(e) 
    { 
     attachMouseEvents(); 
    }); 

    // Has touchscreen 
    jQuery("body").one("touchstart", function(e) 
    { 
     // Unbind the mouse detector, as this will fire on some touch devices. Touchstart should always fire first. 
     jQuery("body").unbind("mousemove"); 

     attachTouchEvents(); 
    }); 
}); 
+0

महान से समारोह isEventSupported ले लिया! प्लेबुक (आरआईएम ओएस) के साथ प्रयास किया, और पहली बार ठीक काम करता है, लेकिन पेज रीफ्रेश पर यह mousemove (!?) का पता लगाता है। हालांकि, शरीर के बजाय कुछ #id को परीक्षण संलग्न करना पूरी तरह से काम करता है। – MaxD

उत्तर

5

आप detecting keyboard or touch input के लिए समाधान के विपरीत कर सकता है:

+0

हालांकि मेरी इच्छा है कि ऐसा करने के लिए एक क्लीनर तरीका था, यह काम करने वाला समाधान साबित हुआ। मैं पोस्टरिटी के लिए प्रश्न में अपना कोड पोस्ट कर रहा हूं। आपकी सहायताके लिए धन्यवाद! –

-1

वेब साइटों का पता लगा सकते हैं कि आप एक मोबाइल ब्राउज़र का उपयोग कर रहे के रूप में सही रूप में के रूप में वे कारण है कि आप अनुमान लगाने के लिए वे माउसओवर का समर्थन नहीं है उसी तकनीक का उपयोग नहीं कर सकते हैं?

Modernizr.hasEvent("mouseover", document); 
+0

क्या होगा यदि यह एक एंड्रॉइड टैबलेट है जिसमें माउस संलग्न है (जिसे किया जा सकता है)? मैं माउस घटनाओं के लिए विशिष्ट भविष्य के सबूत समाधान की तलाश में हूं। (मेरे पास पहले से ही उपयोगकर्ता एजेंट के आधार पर क्रोम और मोबाइल के लिए चेकिंग की जगह हैक है, लेकिन उपयोगकर्ता एजेंट हमेशा भरोसेमंद नहीं होते हैं।) –

+0

यिक्स, नहीं पता था कि एंड्रॉइड टैबलेट में माउस अटैचमेंट विकल्प था! –

+0

पागल, है ना? यह एक बढ़िया मामला है, लेकिन यदि आप एक यूएसबी पोर्ट के साथ एक एंड्रॉइड में माउस प्लग करते हैं, तो यह काम करता है। –

1

आप Modernizr का उपयोग कर के बारे में सोचना चाहते हो सकता है, आप विधि का उपयोग निम्नलिखित Modernizer.hasEvent() (docs) की तरह कुछ कर सकता है। बस एक वास्तविक टच इवेंट या माउस मूव इवेंट की प्रतीक्षा करें और उस पर आधारित निर्णय लें। यदि आप किसी ईवेंट हैंडलर की उपस्थिति की जांच करते हैं, तो ब्राउज़र इंगित कर सकता है कि इसमें ईवेंट है, भले ही वह वर्तमान में हार्डवेयर पर चल रहा न हो, तो ऐसा करने के लिए केवल विश्वसनीय चीज़ प्रतीक्षा करें और देखें कि कौन सी वास्तविक घटनाएं आग लगती हैं।

+0

मैं इस विशिष्ट कार्य के लिए मॉडर्निज़र के सभी ओवरहेड नहीं चाहता था, लेकिन मैं isEventSupported फ़ंक्शन को बाहर निकालने में सक्षम था और मुझे जो चाहिए वह करने के लिए इसे बदलने में सक्षम था। धन्यवाद! –

+0

मैंने बहुत जल्द बात की। Modernizr.hasEvent ("mouseover") आईफोन पर सच होने का मूल्यांकन करता है। –

0

मैंने इसे आजमाया है और यह काम है।

<html> 
<head> 
    <script type="text/javascript"> 
     function isEventSupported(eventName) { 
      var el = document.createElement("body"[eventName] || "div"); 
      var isSupported = "on" + eventName.toLowerCase() in el || top.Event && typeof top.Event == "object" && eventName.toUpperCase() in top.Event; 
      el = null; 
      return isSupported; 
     } 
    </script> 
</head> 

<body onload="alert(isEventSupported('mouseover'));">TEST mouseover event</body> 
</html> 

मैं http://www.strictly-software.com/eventsupport.htm

+0

यह समाधान काम करना चाहिए, लेकिन यदि आप इस कोड को किसी iPhone पर आज़माते हैं, तो यह अभी भी सत्य का मूल्यांकन करता है। मुझे संदेह है कि स्पर्श घटनाएं हुड के नीचे फोकस/माउसओवर को ट्रिगर करने में सक्षम हैं, और इसलिए मोबाइलसाफरी उस घटना को उपस्थित होने के रूप में देखती है, भले ही कोई माउस न हो। –