[javascript] D3.js를 이용한 드래그 이벤트 처리하기

D3.js는 데이터 시각화를 위한 JavaScript 라이브러리로, 강력한 드래그 이벤트 처리 기능을 제공합니다. 드래그 이벤트를 사용하면 사용자가 그래픽 요소를 마우스로 클릭하고 이동할 수 있습니다. 이번 블로그 포스트에서는 D3.js를 사용하여 드래그 이벤트를 처리하는 방법에 대해 알아보겠습니다.

필요한 라이브러리 가져오기

먼저, D3.js와 함께 사용할 d3-drag 모듈을 가져와야 합니다. 이 모듈은 드래그 이벤트를 처리하기 위한 기능을 제공합니다. 아래와 같이 스크립트 태그를 사용하여 필요한 라이브러리를 로드할 수 있습니다.

<script src="https://d3js.org/d3.v6.min.js"></script>
<script src="https://d3js.org/d3-drag.v3.min.js"></script>

SVG 요소 생성하기

드래그 이벤트를 사용하여 움직일 객체를 만들기 위해 SVG 요소를 생성해야 합니다. 아래와 같이 SVG 요소를 추가할 수 있습니다.

const svg = d3.select("body")
  .append("svg")
  .attr("width", 500)
  .attr("height", 500);

객체 생성하기

움직일 객체를 생성합니다. 예를 들어, 원을 만들고 싶다면 아래와 같은 코드를 사용할 수 있습니다.

const circle = svg.append("circle")
  .attr("cx", 100)
  .attr("cy", 100)
  .attr("r", 50)
  .style("fill", "red");

드래그 이벤트 처리하기

이제 실제로 드래그 이벤트를 처리해보겠습니다. d3-drag 모듈의 drag 함수를 사용하여 객체에 드래그 이벤트를 바인딩할 수 있습니다.

const dragHandler = d3.drag()
  .on("start", onDragStart)
  .on("drag", onDrag)
  .on("end", onDragEnd);

dragHandler(circle);

function onDragStart() {
  console.log("Drag start");
}

function onDrag() {
  const xPos = d3.event.x;
  const yPos = d3.event.y;
  
  circle.attr("cx", xPos)
    .attr("cy", yPos);
}

function onDragEnd() {
  console.log("Drag end");
}

onDragStart 함수는 드래그 시작 시 실행되고, onDrag 함수는 드래그 도중 실행되며, onDragEnd 함수는 드래그 종료 시 실행됩니다. onDrag 함수에서 마우스 위치에 따라 객체의 좌표를 업데이트하여 움직입니다.

결과 확인하기

이제 웹 브라우저에서 결과를 확인해보세요. 원을 마우스로 클릭하여 이동할 수 있습니다.

결론

이번 포스트에서는 D3.js를 이용하여 드래그 이벤트를 처리하는 방법을 알아보았습니다. D3.js는 데이터 시각화에 필요한 다양한 기능을 제공하므로, 더 많은 기능을 사용해보고 응용해볼 수 있습니다.

더 자세한 내용은 D3.js 공식 문서를 참고하세요.