2009-03-21 7 views
14

मैं आईफ़ोन पर सफारी में देखे जाने पर किसी पृष्ठ पर उपयोगकर्ता ज़ूमिंग और पैनिंग को ट्रैक करने के विकल्पों के विकल्पों की तलाश करता हूं। सफारी ने कदम और इशारा कार्यक्रमों का खुलासा किया, इसलिए सैद्धांतिक रूप से मैं पैन और ज़ूम ऑपरेशंस का चल रहा तालमेल रख सकता हूं, लेकिन ऐसा लगता है कि ब्राउज़र को आंतरिक रूप से ट्रैक करना चाहिए क्योंकि यह ओवरकिल जैसा लगता है।सफारी आईफोन - ज़ूम स्तर और ऑफसेट का पता कैसे लगाया जाए?

क्या यह जानकारी दस्तावेज़ ऑब्जेक्ट मॉडल के माध्यम से सामने आई है?

उत्तर

2

Safari Web Content Guide के अनुसार, ज़ूम ईवेंट (डबल टैप) का खुलासा नहीं किया गया है, इसलिए मुझे यकीन नहीं है कि आप इसे कैसे ट्रैक कर सकते हैं।

मुझे विश्वास नहीं है कि यह जानकारी डोम के माध्यम से सामने आई है।

1

मुझे लगता है कि स्टीव के जवाब के बाद चीजें थोड़ी देर में चली गईं, क्योंकि उन्होंने प्रदान की गई सामग्री मार्गदर्शिका लिंक पर एक नज़र डालने के बाद मैं Handling Multi-Touch Events और Handling Gesture Events पर एक अनुभाग देख सकता हूं।

अभी तक कोशिश नहीं की है लेकिन वे बहुत ही आशाजनक दिखते हैं। एक बार मैं उन्हें बाहर की जाँच की और एक डेमो लिंक उपलब्ध किया है मैं अद्यतन उपलब्ध कराएँगे ...

+0

google fastflip (http://fastflip.googlelabs.com/) ऐसा करता है, तो यह निश्चित रूप से संभव है – cobbal

+0

कोई अपडेट आ रहा है? ;) – alex

22

जब आप में ज़ूम, window.innerWidth निकाला जाता है, लेकिन document.documentElement.clientWidth इसलिए नहीं है:

var zoom = document.documentElement.clientWidth/window.innerWidth; 

(मैंने आईओएस 4 का परीक्षण किया है, viewport<meta> के बिना)।

हालांकि, मैं किसी भी महत्वपूर्ण चीज़ के लिए इस पर भरोसा नहीं करता। मोबाइल ब्राउज़र में डीओएम व्यूपोर्ट आकार/पिक्सेल आकार are a complete mess

screenOrientedWidth = screen.width; 
if (window.orientation == 90) { 
    screenOrientedWidth = screen.height; 
} 
return screenOrientedWidth/window.innerWidth; 

यह कैसे विस्तृत सामग्री है निर्भर नहीं करता है:

+0

इसके लिए धन्यवाद। यह एक हैक है, लेकिन ऐसा लगता है कि यह वास्तव में काम कर सकता है, जो कम से कम कुछ है। –

+3

बस यहां इंगित करें (इसलिए शायद एक कम दस्तावेज़ चलाने की आवश्यकता है) कि 'document.documentElement.clientWidth' में scrollbars शामिल नहीं है, जबकि' window.innerWidth' करता है। ऊंचाई के लिए वही। – icedwater

+0

सफारी 10 के लिए स्क्रॉलबार को अनदेखा करना, इसकी var zoom = document.documentElement.clientWidth/window.outerWidth; – uchuugaka

0

मैं इस तरह से ज़ूम करें (केवल iOS पर काम करता है) को मापने।

हालांकि, आईओएस सफारी window.innerWidth में gestureend हैंडलर के अंदर सही नहीं है। आपको बाद में निष्पादन के लिए ऐसी गणना को स्थगित करना चाहिए। जीडब्ल्यूटी में, मैं scheduleDeferred का उपयोग करता हूं, लेकिन मैं यह नहीं कह सकता कि शुद्ध जावास्क्रिप्ट में इसे कैसे कार्यान्वित किया जाए।

1

मोबाइल सफारी और एंड्रॉइड पर, यह मापने का एक सटीक तरीका है कि पृष्ठ ज़ूम किया गया है।

इसे आजमाएं: http://jsbin.com/cobucu/3 - ज़ूम बदलें और फिर मापें क्लिक करें।

<body> 
<div id=measurer style="position:absolute;width:100%"></div> 

और गणना का उपयोग करें::

function getZoom(){ 
    return document.getElementById('measurer').offsetWidth/window.innerWidth; 
} 

समस्या सिर्फ पता लगाने के लिए कि उपयोगकर्ता ज़ूम बदल गया है एक साफ रास्ता खोजने है (चुटकी

तकनीक एक शीर्ष स्तर div जोड़ने के लिए है , डबल टैप, आदि)।विकल्प:

  • webkitRequestAnimationFrame: बहुत विश्वसनीय है, लेकिन संभावना jankiness अगर एनिमेशन (प्रदर्शन हिट के कारण)
  • setInterval का उपयोग कर पैदा करने के लिए: विश्वसनीय लेकिन बहुत बदसूरत
  • स्पर्श इवेंट: दो अंगुलियों या डबल टैप के लिए देखो : बदसूरत और शायद मुश्किल बनाने के लिए 100% विश्वसनीय
  • window.onresize + window.onorientationchange + window.onscroll: सरल लेकिन पूरी तरह अविश्वसनीय (संपादित करें: और Onscroll WKWebView या मोबाइल सफारी 8 या अधिक से अधिक में प्रदर्शन समस्याएं पैदा कर सकता)।

पुनश्च: विंडोज फोन एक अलग समाधान (- विंडोज पर पिंच-ज़ूम इसके खुद अलग व्यूपोर्ट कि जावास्क्रिप्ट को दिखाई नहीं देता है पिंच-ज़ूम व्यूपोर्ट परिवर्तन नहीं करता है) की जरूरत है।

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