मेरा मुद्दा भी ऐसा ही था। लेकिन मैं अपने तत्वों को स्थिति में लाने के लिए डी 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।
एक स्ट्रिंग टेम्पलेट शाब्दिक का उपयोग करते समय, पहले उदाहरण में सचित्र के रूप में लाइन-ब्रेक के बारे में पता होना चाहिए। इसमें आउटपुट में एक नई पंक्ति शामिल होगी और आपका कोड टूट सकता है।