2010-05-07 19 views
12

आईफ़ोन मोबाइल सफारी तत्व अनुपलब्ध प्रतीत होता है .getBoundingClientRect। आईफोन मोबाइल सफारी पर समकक्ष विधि क्या है? यह विधि आईपैड पर मौजूद है।आईफोन मोबाइल सफारी 3 पर getBoundingClientRect के बराबर क्या है?

उत्तर

7

संपादित करें 1: यह कोड (webkitConvertPointFromNodeToPage) केवल पुराने और पुराने फोन के लिए आवश्यक है ... these comments देखें।

संपादित करें 2: मैं आपको इस कोड का उपयोग करने की अनुशंसा नहीं करता ... मुझे लगता है कि आईई 10 के साथ टच ज़ूम के साथ कुछ समस्या से निपटने के लिए इसे बदलना याद है। मैं फिक्स के साथ कोड को अद्यतन करने के लिए याद रखने की कोशिश करूंगा।

था: मुझे लगता है पर IE6 +, FF3 +, सफारी 2 + (डेस्कटॉप & मोबाइल), क्रोम (डेस्कटॉप & एंड्रॉयड), ओपेरा निम्नलिखित काम करता है:

function offset(el) { 
    var convertPoint = window.webkitConvertPointFromNodeToPage; 
    if ('getBoundingClientRect' in el) { 
     var 
      boundingRect = el.getBoundingClientRect(), 
      body = document.body || document.getElementsByTagName("body")[0], 
      clientTop = document.documentElement.clientTop || body.clientTop || 0, 
      clientLeft = document.documentElement.clientLeft || body.clientLeft || 0, 
      scrollTop = (window.pageYOffset || document.documentElement.scrollTop || body.scrollTop), 
      scrollLeft = (window.pageXOffset || document.documentElement.scrollLeft || body.scrollLeft); 
     return { 
      top: boundingRect.top + scrollTop - clientTop, 
      left: boundingRect.left + scrollLeft - clientLeft 
     } 
    } else if (convertPoint) { 
     var 
      zeroPoint = new WebKitPoint(0, 0), 
      point = convertPoint(el, zeroPoint), 
      scale = convertPoint(document.getElementById('scalingEl'), zeroPoint); 
     return { 
      top: Math.round(point.y * -200/scale.y), 
      left: Math.round(point.x * -200/scale.x) 
     } 
    } 
} 

जहां निम्नलिखित शरीर का एक बच्चा है :

<div id="scalingEl" style="position:absolute;top:-200px;left:-200px;visibility:hidden;"></div> 

विधि को कुछ त्रुटि जांच की आवश्यकता है (उदाहरण के लिए तत्व दस्तावेज़ में होना चाहिए)। स्केल इसे ज़ूम करते समय काम करता है, लेकिन इसकी आवश्यकता नहीं हो सकती है (विंडोज सफारी में webkitConvertPointFromNodeToPage का परीक्षण करते समय मुझे इसकी आवश्यकता थी)।

1

आईओएस 3 पर ele.getBoundingClientRect()। चौड़ाई विधि की तलाश में किसी को भी के लिए, आप ele.offsetWidth

if("getBoundingClientRect" in this.container) { 
    this.width = this.container.getBoundingClientRect().width ;  
}else { 
    this.width = this.container.offsetWidth; //http://help.dottoro.com/ljvmcrrn.php 
} 
+0

उपयोग कर सकते हैं एक सरल जांच 'हो सकता है अगर (div.getBoundingClientRect) {} else {} ' –

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