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
, cy
ve transform-origin
aynı verileri kullanarak javascript değerleri.
AMA bu Firefox'ta işe yaramadı! Ne yapmak zorunda sarmak oldu circle
yılında g
etiketi ve translate
bunun yukarıdan aynı konumlandırma formülü kullanarak. Sonra eklenen circle
içinde g
etiketi ve onun set cx
ve cy
değ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 circle
yerine .dot
eklemek 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 .attrs
yinelemek 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.