2016-09-09 9 views
5

someElement.getBoundingClientRect() का परिणाम देता है एक विशेष प्रकार ClientRect (या DomRect जाहिरा तौर पर)कैसे सबसे अच्छा एक सादे वस्तु में एक ClientRect/DomRect कन्वर्ट करने के लिए

यह {top: 10, right: 20, bottom: 30, left: 10, width: 10}

दुर्भाग्य से, इस वस्तु की तरह संरचित है की वस्तु अन्य वस्तुओं की तरह व्यवहार नहीं करता है।

उदाहरण के लिए, यह एक खाली सरणी रिटर्न पर Object.keys का उपयोग कर (मुझे लगता है कि क्योंकि ClientRect गुण नहीं हैं गणनीय

मैं एक गंदा रास्ते से कुछ एक सादे वस्तु में बदलने के लिए मिला:

var obj = {} 
for (key in rect) { 
    obj[key] = rect[key] 
} 

मेरा सवाल है, क्या कोई बेहतर तरीका है?

+1

यह _soooo_ hacky है, लेकिन 'Object.keys (document.body.getBoundingClientRect() .__ आद्य __)' क्रोम में काम करने लगता है। : पी –

उत्तर

1
var obj = Object.assign({}, el.getBoundingClientRect().toJSON()) 
+0

वैसे वहाँ है। '.toJSON() 'जादू था! –

+0

मुझे लगता है कि आपको वहां 'ऑब्जेक्ट.साइन' की भी आवश्यकता नहीं है। '.toJSON' एक उचित ऑब्जेक्ट को रोकता है (' ऑब्जेक्ट.कीज ($ 0.getBoundingClientRect()। toJSON()) 'काम करता है)। आपको हर बार एक ताजा वस्तु भी मिलती है! '$ 0.getBoundingClientRect()। ToJSON()! == $ 0.getBoundingClientRect()। ToJSON()' –

8

चलो चीज़ों को कम नहीं करते हैं!

function getBoundingClientRect(element) { 
    const rect = element.getBoundingClientRect(); 
    return { 
    top: rect.top, 
    right: rect.right, 
    bottom: rect.bottom, 
    left: rect.left, 
    width: rect.width, 
    height: rect.height, 
    x: rect.x, 
    y: rect.y 
    }; 
} 
+2

यहां एक ईएस 6 संस्करण है: '' 'कॉन्स getBoundingClientRect = (तत्व) => { कॉन्स {शीर्ष, दाएं, नीचे, बाएं, चौड़ाई, ऊंचाई, एक्स, वाई} = element.getBoundingClientRect(); वापसी {शीर्ष, दाएं, नीचे, बाएं, चौड़ाई, ऊंचाई, एक्स, वाई} } '' – aboutaaron

4

आप इस्तेमाल कर सकते हैं विधि का विस्तार अगर आप jQuery का उपयोग कर रहे हैं।

var obj = $.extend({}, element.getBoundingClientRect()); 
+0

यह काम कर सकता है और करता है, लेकिन $ .extend कई अन्य क्लोनिंग विधियों की तुलना में कुख्यात रूप से अक्षम है। Http://jsben.ch/#/bWfk9 देखें। ओपी नोट्स के रूप में ClientRect हालांकि एक विशेष वस्तु है, और अधिकांश (सभी?) अन्य तकनीकें अपेक्षित काम नहीं करती हैं, इसलिए यहां बहुत सारे विकल्प नहीं हैं। – kamelkev

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

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