同様の問題がありました。しかし、私は要素を配置するためにD3を使用していて、変換と遷移をCSSで処理したいと考えていました。これは私の元のコードで、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
同じデータを使用してJavaScriptで値を。
しかし、これはFirefoxでは機能しませんでした!私がしなければならなかったことは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
代わりにをターゲットにするようにCSSを変更しまし.dot
たtransform: scale(2)
。私も使用する必要はありませんでしたtransform-origin
。
ノート:
d3-selection-multi
2番目の例で使用しています。これにより、属性ごと.attrs
に繰り返す代わりに、オブジェクトをに渡すことができ.attr
ます。
文字列テンプレートリテラルを使用する場合は、最初の例に示すように改行に注意してください。これにより、出力に改行が含まれ、コードが壊れる可能性があります。