मैं एक HTML तत्व को सही तरीके से ओवरले करने के लिए, स्क्रीन पिक्सेल में मनमानी एसवीजी तत्व के बाध्यकारी बॉक्स को पाने का सबसे अच्छा तरीका खोजने का प्रयास कर रहा हूं। ऑब्जेक्ट के बाउंडिंग बॉक्स को पुनर्प्राप्त करने और मैट्रिक्स को बदलने के लिए अब तक मेरा दृष्टिकोण .getBBox()
और .getCTM()
का उपयोग करना है, फिर this question पर स्वीकृत उत्तर में वर्णित बाउंडिंग बॉक्स बिंदुओं में परिवर्तन लागू करें।स्क्रीन पिक्सल में घूर्णनित एसवीजी तत्व की सीमाएं पाएं?
// get the element
var el = $(selector)[0],
pt = $(selector).closest('svg')[0].createSVGPoint();
// get the bounding box and matrix
var bbox = el.getBBox(),
matrix = el.getScreenCTM();
pt.x = bbox.x;
pt.y = bbox.y;
var nw = pt.matrixTransform(matrix);
pt.x += bbox.width;
pt.y += bbox.height;
var se = pt.matrixTransform(matrix);
// make a div in the screen space around the object
var $div = $('<div class="bbox"/>').css({
left: nw.x,
top: nw.y,
width: se.x - nw.x,
height: se.y - nw.y
})
.appendTo('body');
आप अपने परीक्षण यहाँ देख सकते हैं: http://jsfiddle.net/nrabinowitz/zr2jX/
हालांकि, परीक्षण से पता चलता है के रूप में, इस दृष्टिकोण जब वहाँ एक रोटेशन को बदलने में शामिल विफल रहा है - ऐसा लगता है सीमांकन बॉक्स की तरह पूर्व गणना की जाती है घूर्णन, इसलिए घुमावदार बाउंडिंग बॉक्स के कोनों को काम नहीं कर रहा है।
मैं परिवर्तित तत्वों के गैर-घुमावदार बाउंडिंग बॉक्स की सही गणना कैसे कर सकता हूं?
एक अच्छा बात है कि है, लेकिन एक) यह सबसे अच्छा होगा अगर मैं घुमाया बाउंडिंग बॉक्स के बुनियादी सीमा मिल सकता है, और ख) मैं आशा करती हूं वहाँ कुछ मैं एसवीजी एपीआई में नहीं पता जो मुझे परिवर्तित आकार के आधार पर एक नया बाउंडिंग बॉक्स दे सकता है। – nrabinowitz
सिद्धांत में आप [चेकइन्क्लोजर] (http://www.w3.org/TR/SVG11/struct.html#__svg__SVGSVGElement__checkEnclosure) का उपयोग कर सकते हैं ताकि आपके आय को पूरी तरह से घेरने वाले छोटे आयत के लिए बाइनरी खोज की एक प्रकार की जा सके।दुर्भाग्य से [यह अभी तक फ़ायरफ़ॉक्स में लागू नहीं किया गया है] (https://bugzilla.mozilla.org/show_bug.cgi?id=501421)। –