2012-04-19 14 views
9

में अलग-अलग मान देता है मेरे पास एक छवि नियंत्रण है और मुझे छवि नियंत्रण के शीर्ष पर कुछ तत्व रखने की आवश्यकता है। जब मैंने getBoundingClientRect() का उपयोग किया, तो यह आईई (7,8 और 9) में काम कर रहा है लेकिन यह फ़ायरफ़ॉक्स और क्रोम में अलग-अलग मान दे रहा है। क्या तत्व के बाउंडिंग आयत को प्राप्त करने के लिए कोई अन्य फ़ंक्शन उपलब्ध है?क्यों बाउंडिंग क्लाइंटरटेक्ट आईई और फ़ायरफ़ॉक्स

उत्तर

11

getBoundingClientRect के लिए पुराने IE प्रलेखन से प्रशस्ति पत्र:: यहाँ comp.lang.javascript से उसकी की एक टिप है "माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर 5 में, खिड़की के ऊपरी-बाएं के संबंध में 2,2 (पिक्सेल) पर है सही ग्राहक। " यह अभी भी वैध प्रतीत होता है।

आईई 9 उपयोग में <meta http-equiv="x-ua-compatible" content="ie=edge"/> ऊपरी-बाएं कोने को अपनी सही स्थिति (0,0) पर "सेट" करता है।

d4rkpr1nc3 के उत्तर के रूप में, आप उन मानों को अन्य तरीकों से प्राप्त कर सकते हैं, लेकिन परिणाम भी उपयोग किए गए ब्राउज़र पर निर्भर करते हैं। मुझे लगता है कि आपको इस समस्या के लिए थोड़ा अलग दृष्टिकोण की आवश्यकता होगी। नीचे दिए गए कोड को चेक करें, यह आपको कुछ विचार दे सकता है।

<DIV id="imagecontrol" style="position:absolute;width:200px;height:200px;"> 
    <DIV id="topleft" style="position:absolute;width:100px;height:100px;left:0px;top:0px;"></DIV> 
    <DIV id="topright" style="position:absolute;width:100px;height:100px;right:0px;top:0px;"></DIV> 
    <DIV id="bottomleft" style="position:absolute;width:100px;height:100px;left:0px;bottom:0px;"></DIV> 
    <DIV id="bottomright" style="position:absolute;width:100px;height:100px;right:0px;bottom:0px;"></DIV> 
</DIV> 
+0

क्रोम के समान मान देने के लिए आप ie8 कैसे प्राप्त करते हैं? – SuperUberDuper

+1

@SuperUberDuper मेरे उत्तर का विचार यह है कि आप शायद नहीं कर सकते हैं। लेआउट मॉडल अलग-अलग ब्राउज़रों में डिफेंजर है, खासकर आईई 8 जैसे पुराने लोगों में। हालांकि आप मूल्य के साथ गणित कर सकते हैं, लेकिन यह कैसे करना है इसके बारे में अपने प्रश्न पूछना बेहतर है। – Teemu

+0

ठीक है धन्यवाद !!!!!!! – SuperUberDuper

2

वैसा करने के लिए, इस तरह ऑफसेट इस्तेमाल कर सकते हैं:

var top = element.offsetTop; 
var left = element.offsetLeft; 
var width = element.offsetWidth; 
var height = element.offsetHeight; 
var bottom = top + height; 
var right = left + width; 
+6

वास्तव में नहीं। उदाहरण के लिए, 'getBoundingClientRect' खाता सीएसएस रूपांतरणों को ध्यान में रखता है। – tillda

+0

दरअसल नहीं: ऑफसेट टॉप एक स्थित माता-पिता से संबंधित स्थिति है, यदि कोई है, तो स्थिति वाले किसी भी माता-पिता: सापेक्ष/निश्चित/पूर्ण ऑफसेट मान को प्रभावित करेगा (domcument.body से ऑफसेट मान बनाम जो हम आम तौर पर चाहते हैं) – dougwig

+0

इसने मेरे लिए एक समस्या हल की जहां हम एक छिपे हुए आईफ्रेम से 'range.getBoundingClient() 'का उपयोग करने की कोशिश कर रहे थे और फ़ायरफ़ॉक्स और आईई एक्स/वाई/चौड़ाई/ऊंचाई के लिए सभी शून्य (0) लौट रहे थे। @ d4rkpr1nc3 thx! –

4

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

यहाँ इस बारे में एक अच्छा ब्लॉग पोस्ट है:

http://weblogs.asp.net/bleroy/archive/2008/01/29/getting-absolute-coordinates-from-a-dom-element.aspx

डेविड मार्क इस सामान पर अच्छा है।

https://groups.google.com/forum/?fromgroups#!topic/comp.lang.javascript/zWJaFM5gMIQ

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