Benzer bir sorun yaşadım. Ancak öğelerimi konumlandırmak için D3 kullanıyordum ve dönüşüm ve geçişin CSS tarafından ele alınmasını istedim . Bu, Chrome 65'te çalıştığım orijinal kodumdu:
//...
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) ...
Bu beni ayarlamalarına izin cx, cyve transform-originaynı verileri kullanarak javascript değerleri.
AMA bu Firefox'ta işe yaramadı! Ne yapmak zorunda sarmak oldu circleyılında getiketi ve translatebunun yukarıdan aynı konumlandırma formülü kullanarak. Sonra eklenen circleiçinde getiketi ve onun set cxve cydeğerleri 0. Oradan, transform: scale(2)beklendiği gibi merkezden ölçeklenir. Son kod şuna benziyordu.
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,
})
Bu değişikliği yaptıktan sonra, hedeflediğim benim CSS değişti circleyerine .doteklemek için, transform: scale(2). Kullanmaya bile ihtiyacım yoktu transform-origin.
NOTLAR:
Ben kullanıyorum d3-selection-multiİkinci örnekte. Bu, her öznitelik için .attrsyinelemek yerine bir nesneyi iletmeme izin veriyor .attr.
Bir dize şablonu hazır bilgisi kullanırken, ilk örnekte gösterildiği gibi satır sonlarına dikkat edin. Bu, çıktıda bir satırsonu içerir ve kodunuzu bozabilir.