मेरा मुद्दा भी ऐसा ही था। लेकिन मैं अपने तत्वों को स्थिति में लाने के लिए डी 3 का उपयोग कर रहा था , और चाहता था कि परिवर्तन और परिवर्तन सीएसएस द्वारा संभाला जाए। यह मेरा मूल कोड था, जिसे मुझे Chrome 65 में काम करना था:
//...
this.layerGroups.selectAll('.dot')
.data(data)
.enter()
.append('circle')
.attr('transform-origin', (d,i)=> `${valueScale(d.value) * Math.sin( sliceSize * i)}
${valueScale(d.value) * Math.cos( sliceSize * i + Math.PI)}`)
//... etc (set the cx, cy and r below) ...
यह मैं सेट करने की अनुमति cx
, cy
और transform-origin
एक ही डेटा का उपयोग कर जावास्क्रिप्ट में मान।
लेकिन यह फ़ायरफ़ॉक्स में काम नहीं किया! मुझे जो करना था circle
वह g
टैग में लपेट दिया गया था और translate
यह ऊपर से उसी पोजीशनिंग फॉर्मूला का उपयोग कर रहा था । मैंने फिर टैग circle
में जोड़ा g
, और इसके cx
और cy
मानों को सेट किया 0
। वहां से, transform: scale(2)
उम्मीद के मुताबिक केंद्र से स्केल होगा। अंतिम कोड इस तरह दिखता था।
this.layerGroups.selectAll('.dot')
.data(data)
.enter()
.append('g')
.attrs({
class: d => `dot ${d.metric}`,
transform: (d,i) => `translate(${valueScale(d.value) * Math.sin( sliceSize * i)} ${valueScale(d.value) * Math.cos( sliceSize * i + Math.PI)})`
})
.append('circle')
.attrs({
r: this.opts.dotRadius,
cx: 0,
cy: 0,
})
इस परिवर्तन को करने के बाद, मैंने जोड़ने circle
के लिए .dot
, अपने सीएसएस को बदले के लिए लक्षित किया transform: scale(2)
। मुझे इसके उपयोग की आवश्यकता भी नहीं थी transform-origin
।
टिप्पणियाँ:
मैं d3-selection-multi
दूसरे उदाहरण में उपयोग कर रहा हूं । यह मुझे हर विशेषता के लिए .attrs
दोहराने के बजाय एक ऑब्जेक्ट पास करने की अनुमति देता है .attr
।
एक स्ट्रिंग टेम्पलेट शाब्दिक का उपयोग करते समय, पहले उदाहरण में सचित्र के रूप में लाइन-ब्रेक के बारे में पता होना चाहिए। इसमें आउटपुट में एक नई पंक्ति शामिल होगी और आपका कोड टूट सकता है।