Ho avuto un problema simile. Ma stavo usando D3 per posizionare i miei elementi e volevo che la trasformazione e la transizione fossero gestite dai CSS. Questo era il mio codice originale, che ho ottenuto lavorando in 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) ...
Questo mi ha permesso di impostare la cx, cyei transform-originvalori in JavaScript utilizzando gli stessi dati.
MA questo non ha funzionato in Firefox! Quello che ho dovuto fare è stato avvolgere il circlenel gtag e translateutilizzando la stessa formula posizionamento dall'alto. Ho quindi aggiunto il circlenel gtag e ho impostato i suoi valori cxe cysu 0. Da lì, transform: scale(2)scalerebbe dal centro come previsto. Il codice finale era così.
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,
})
Dopo aver apportato questa modifica, ho cambiato il mio CSS per scegliere come target circleinvece di .dot, per aggiungere il file transform: scale(2). Non ne avevo nemmeno bisogno transform-origin.
APPUNTI:
Sto usando d3-selection-multinel secondo esempio. Questo mi permette di passare un oggetto a .attrsinvece di ripetere .attrper ogni attributo.
Quando si utilizza un modello di stringa letterale, prestare attenzione alle interruzioni di riga come illustrato nel primo esempio. Ciò includerà una nuova riga nell'output e potrebbe interrompere il codice.