비슷한 문제가있었습니다. 하지만 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
동일한 데이터를 이용하여 자바 스크립트 값.
그러나 이것은 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,
})
이 변경을 한 후, 나는 대상으로 내 CSS 변경 circle
대신의 .dot
을 추가를 transform: scale(2)
. 나는 사용할 필요조차 없었습니다 transform-origin
.
노트:
d3-selection-multi
두 번째 예에서 사용 하고 있습니다. 이를 통해 모든 속성에 대해 .attrs
반복 하는 대신 객체를 전달할 수 있습니다 .attr
.
문자열 템플릿 리터럴을 사용하는 경우 첫 번째 예에 설명 된대로 줄 바꿈에 유의하십시오. 이것은 출력에 개행을 포함하고 코드를 손상시킬 수 있습니다.