D3에 대한 Mike Bostock의 예제에서 D3 DragEvent 객체의 동작을 이해할 수 없습니다. D3 끌기 이벤트 비헤이비어 : DragEvent.x 및 DragEvent.y 값 소스
그
내가 이해하지 못하는 두 가지 예입니다기능 (D) 드래그 {d3.select (이 내가 이해하지 못하는 코드가 Circle Dragging I Drag + Zoom
this) .attr ("cx", dx = d3.event.x) .attr ("cy", dy = d3.event.y); }
이 예제에서 d.x와 d.y는 원의 마지막 중심을 포함하는 데이터 객체의 일부입니다.
는 내가이 코드에서 발생할 것으로 예상된다 나의 관점에서 d3.event.x 및 d3.event.y의 현재 값에 원 변화의 속성의 CX 및 CY,해야 사용자가 끌기 시작할 때 마우스가있는 좌표입니다. 사용자가 원의 가운데에서 정확히 드래그를 시작하지 않으면 사용자가 드래그를 시작한 장소로 점프하고 그 다음 드래그하는 일반적인 동작이 예상됩니다.
내 문제는 초기 점프가 발생하지 않으며 그 이유를 모른다는 것입니다.
코드가 실행 중일 때 d3.event.x 및 d3.event.y의 값을 확인했는데 정확히 동일한 값인 d.x 및 d.y이므로 사용자가 서클에서 클릭하는 위치를 신경 쓰지 마십시오. 나는 그것이 왜 그런지 이해하지 못한다.
마지막으로 d.x와 d.y에서 d.m과 d.n으로 오브젝트의 이름 (그리고 이름이 필요할 때마다)을 변경하고 코드가 예상했던대로 작업을 시작했습니다.
함수 (d) {d3.select (이) .attr ("CX 'd.m = d3.event.x) .attr ("CY "d.n = d3.event.y) 드러그; }
따라서 데이터 객체의 속성이 d.x 및 d.y 인 경우 코드가 다르게 작동합니다. 즉, 데이터 객체에 d.m 및 d.n 속성이있는 경우 코드가 다르게 작동합니다. DragEvent가 구체적인 속성을 가진 데이터 객체를 기대하고있는 것처럼 보이지만 이상하게 들리며 문서화 된 것을 찾을 수 없습니다.
누군가가 대답을 이미 알고 있다면 D3 소스 코드를 확인하지 않아야합니다.
마이크 Bostocks의 예는 D3의 버전 3을 사용하고 있습니다. v4에서 테스트하는 경우 현재 차이점이 발생할 수있는 버전 4가 있습니다. –
내 질문에 링크 된 예제는 src = "// d3js.org/d3.v4.min.js"를 사용하므로 문제는 아닌 것 같습니다. 나는 그것을 검사했고 그것이 버전 문제가 아니라는 것을 확인했다. 어쨌든, 예제와의 차이점이 없습니다. 그것은 왜 그것이 작동하는지, 왜 데이터 객체의 속성 이름을 변경하면 작동하지 않는지 이해할 수 없다는 것입니다. – Robert