[javascript] D3.js : 임의의 요소에 대해 계산 된 너비와 높이를 얻는 방법은 무엇입니까?
사용자가 클릭하면 그 주위에 선택 마커를 그려야하기 때문에 g
내 임의의 요소 의 너비와 높이를 정확히 알아야 SVG
합니다.
내가 인터넷에서 본 것은 다음과 같습니다 d3.select("myG").style("width")
. 문제는 요소가 항상 명시적인 너비 속성 집합을 가지지 않는다는 것입니다. 예를 들어 내부에 원을 만들면 너비 대신 g
반경 ( r
)이 설정됩니다. 에 window.getComputedStyle
메서드를 사용하더라도 circle
“auto”를 반환합니다.
에서 임의의 svg
요소 의 너비를 계산하는 방법이 D3
있습니까?
감사합니다.
답변
SVG 요소의 경우
같은 것을 사용하면 다음과 같은 selection.node().getBBox()
값을 얻을 수 있습니다.
{
height: 5,
width: 5,
y: 50,
x: 20
}
HTML 요소의 경우
사용하다 selection.node().getBoundingClientRect()
답변
.getBoundingClientRect () 는 요소의 크기와 뷰포트에 대한 상대적 위치를 반환합니다.
- 왼쪽 오른쪽
- 상단, 하단
- 높이 너비
예 :
var element = d3.select('.elementClassName').node();
element.getBoundingClientRect().width;
답변
한 번 내 변수 (svg 또는 html)에 현재 저장된 요소를 알지 못했지만 너비와 높이를 가져와야 할 때 문제에 직면했습니다. 이 기능을 만들고 공유하고 싶습니다.
function computeDimensions(selection) {
var dimensions = null;
var node = selection.node();
if (node instanceof SVGElement) { // check if node is svg element
dimensions = node.getBBox();
} else { // else is html element
dimensions = node.getBoundingClientRect();
}
console.log(dimensions);
return dimensions;
}
아래 숨겨진 스 니펫의 작은 데모. 파란색 div와 빨간색 svg 원에 대한 클릭을 동일한 기능으로 처리합니다.