2013-05-14 5 views
19

मैं वर्तमान में अपनी वेबसाइट पर मोबाइल डिवाइस का पता लगाने के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं, यह मुझे मोबाइल या डेस्कटॉप उपयोगकर्ताओं के लिए अलग-अलग सामग्री की सेवा करने की अनुमति देता है।पिक्सेल अनुपात/घनत्व का पता लगाने के लिए सर्वोत्तम प्रथाएं क्या हैं?

वर्तमान में मैं window.devicePixelRatio और screen.width का उपयोग बाहर काम करने के अगर एक मोबाइल डिवाइस पर है या नहीं अगर है, तो जैसे उपयोगकर्ता:

var isMobileScreenWidth = ((screen.width/window.devicePixelRatio) < 768) 

768px बिंदु है जिस पर हम परिभाषित मोबाइल या डेस्कटॉप तो 767 और नीचे है मोबाइल और 768 और ऊपर डेस्कटॉप है।

यह पूरी तरह से काम करता है, लेकिन मैं हाल ही में फ़ायरफ़ॉक्स, जब फ़ायरफ़ॉक्स में और यह परिवर्तन window.devicePixelRatio ज़ूम आउट किया गया है के साथ एक समस्या का सामना करते हैं, इसलिए:

zoom = 30%, window.devicePixelRatio = 0.3 
zoom = 100%, window.devicePixelRatio = 1.0 
zoom = 300%, window.devicePixelRatio = 3.0 

यह अब मुझे एक समस्या का कारण बनता है क्योंकि किसी भी उपयोगकर्ताओं को जो फ़ायरफ़ॉक्स पर अपने ब्राउजर को ज़ूम किया है साइट के मोबाइल संस्करण को प्राप्त करें।

मैं सोच रहा था कि क्या किसी को पिक्सेल घनत्व प्राप्त करने का एक अलग या बेहतर तरीका पता था जो डेस्कटॉप ब्राउज़र से अलग है।

मैं उपयोगकर्ता एजेंट पहचान की एक छोटी राशि का भी उपयोग करता हूं लेकिन मोबाइल उपयोगकर्ता एजेंटों की लगातार बदलती सूची के साथ रखने के लिए यह एक बड़ी नौकरी है क्योंकि मेरे लिए स्क्रीन रिज़ॉल्यूशन और उपयोगकर्ता दोनों पर निर्भर होना संभव नहीं है एजेंट एक ही समय में।

अगर किसी के पास इसके बारे में कोई विचार है और यह मददगार हो सकता है।

अद्यतन:

मैं सिर्फ यह भर में आ गए हैं:

window.screen.availWidth/document.documentElement.clientWidth 

गणित के इस त्वरित बिट इस पोस्ट में सुझाव दिया है:

window.devicePixelRatio does not work in IE 10 Mobile?

मैं इसे और यह परीक्षण किया है फ़ायरफ़ॉक्स में काम करें, और मेरी समस्या हल करती है, लेकिन दुर्भाग्य से अब क्रोम में समस्या आती है, इसलिए:

Chrome zoom = 100%, 
window.devicePixelRatio = 1.0, 
window.screen.availWidth/document.documentElement.clientWidth = 3.0 

मुझे एक ठोस समाधान नहीं मिल रहा है जो सब कुछ के लिए काम करता है।

+0

मोबाइल को जांचने के लिए आपको डिवाइस पिक्सेल अनुपात का उपयोग नहीं करना चाहिए: कुछ गैर मोबाइल डिवाइस "रेटिना" (आईपैड, मैक बुक प्रो ...) और मोबाइल शैलियों को दिखाएगा। केवल एचडी छवियों के लिए इसका इस्तेमाल करें। –

+0

@ युकुलेले मैं आपकी चिंता देखता हूं। यही कारण है कि मैं 'window.devicePixelRatio' द्वारा 'screen.width' को विभाजित कर रहा था, फिर जांच कर रहा हूं कि इसका परिणाम' 768px' (आईपैड की चौड़ाई) से कम है या नहीं। ऐसा करने से अधिकांश टैबलेट डिवाइस मोबाइल शैली को देखने से रोके होंगे। हालांकि किंडल फायर जैसे कुछ टैबलेट डिवाइस मोबाइल शैलियों को दिखाते हैं क्योंकि वे छोटी गोलियाँ हैं। मैंने इस चिंता पर विचार नहीं किया क्योंकि मोबाइल उपकरणों ने इन उपकरणों के लिए काफी अच्छा प्रदर्शन किया है। – lukehillonline

उत्तर

14

आपको <meta name="viewport" content="width=device-width"/> या @-ms-viewport {width:device-width} सुविधा के माध्यम से निर्माता के संकेत का लाभ उठाना चाहिए। यह मूल रूप से डिफॉल्ट ज़ूम का खुलासा करता है जो डिवाइस निर्माता स्क्रीन के पिक्सेल घनत्व को इष्टतम मानता है। ऐसा करने के बाद, जब आप window.innerWidth पर कॉल करते हैं तो यह आपको देगा कि आपका मूल समीकरण क्या था लेकिन पिक्सेल घनत्व के माप पर निर्भर किए बिना।

किसी भी चीज़ के लिए window.devicePixelRatio पर भरोसा करने से बचें। इसका अर्थ और मूल्य जो यह लौटाता है वह फिलहाल प्रवाह की स्थिति में है और जो कुछ भी आप अभी करते हैं उसके आसपास स्थित है, वह जल्द ही बहुत जल्द टूट जाएगा।

नोट: मेटा व्यूपोर्ट केवल IE10 मेट्रो पर Android, iOS और विंडोज फोन 8 @ एमएस-व्यूपोर्ट केवल (ठीक से) काम करता है पर काम करता है और विंडोज फोन पर उचित मेटा व्यूपोर्ट व्यवहार के साथ हस्तक्षेप कर सकते हैं 8.

+1

इस पर मेरे पास आने के लिए बहुत बहुत धन्यवाद, मैं इसके समाधान के लिए पूरी तरह से खो गया हूं। इसलिए यदि आपको नहीं लगता कि 'window.devicePixelRatio' का उपयोग करना एक सुरक्षित विकल्प है तो आप इसके बजाय क्या उपयोग करेंगे? मैंने मोबाइल उपकरणों का पता लगाने के लिए कई विकल्पों को देखा है, दुर्भाग्य से मेरे लिए सर्वर साइड समाधान संभव नहीं है इसलिए जावास्क्रिप्ट मेरा एकमात्र विकल्प है। – lukehillonline

+1

एक विचार सीएसएस में दिखाई देने के लिए लंबवत स्क्रॉलबार को मजबूर करना है, फिर 'document.ocumentElement.clientWidth' की तुलना' window.innerWidth' से करें। वे मोबाइल वातावरण में बराबर होना चाहिए (कोई चुटकी ज़ूम नहीं) लेकिन खिड़की वाले डेस्कटॉप वातावरण में नहीं। –

+0

मैंने इसे डाउनवॉइड किया क्योंकि यह एक डेवलपर को एक HTML ऐप के आयामों पर पूर्ण नियंत्रण की अनुमति नहीं देता है (न ही ऐसा कोई तंत्र मौजूद है)। यह आपकी गलती नहीं है, बल्कि वेब तकनीक की सीमा है। देशी विकास के विपरीत, वास्तविक दुनिया में वास्तव में 1 बिंदुओं के वास्तव में उपायों की गणना करने का कोई तरीका नहीं है। – trusktr

संबंधित मुद्दे

 संबंधित मुद्दे