[javascript] 자바스크립트에서 동적으로 요소를 드래그 가능하도록 만드는 방법

요소를 드래그 가능하도록 만드는 것은 사용자 인터페이스에 향상된 상호작용성을 제공하는 데 도움이 됩니다. 자바스크립트를 사용하여 요소를 드래그 가능하도록 만드는 방법에 대해 알아보겠습니다.

HTML 마크업 설정하기

드래그 가능한 요소를 생성하기 위해 HTML 마크업을 설정해야 합니다. 드래그 가능한 요소가 되도록 <div> 요소를 만들어보겠습니다.

<div id="dragElement">드래그 가능한 요소</div>

자바스크립트 이벤트 핸들러 구현하기

자바스크립트를 사용하여 요소를 드래그할 수 있도록 이벤트 핸들러를 구현해야 합니다. 이벤트 핸들러에서는 마우스 이벤트를 처리하고 요소를 이동시키는 코드를 작성합니다.

var dragElement = document.getElementById("dragElement");
var offsetX, offsetY;

dragElement.addEventListener("mousedown", function(event) {
  offsetX = event.clientX - dragElement.offsetLeft;
  offsetY = event.clientY - dragElement.offsetTop;
  
  document.addEventListener("mousemove", onMouseMove);
  document.addEventListener("mouseup", onMouseUp);
});

function onMouseMove(event) {
  dragElement.style.left = event.clientX - offsetX + "px";
  dragElement.style.top = event.clientY - offsetY + "px";
}

function onMouseUp(event) {
  document.removeEventListener("mousemove", onMouseMove);
  document.removeEventListener("mouseup", onMouseUp);
}

드래그 가능한 요소에 스타일 적용하기

드래그 가능한 요소에 스타일을 적용하여 사용자에게 시각적인 피드백을 제공할 수 있습니다. 예를 들어 드래그 중일 때 요소의 배경색을 변경하거나 경계선을 추가할 수 있습니다.

#dragElement {
  position: absolute;
  top: 50px;
  left: 50px;
  width: 200px;
  height: 200px;
  background-color: #f1f1f1;
  border: 1px solid #ccc;
  cursor: move;
}

동적으로 생성된 요소에도 적용되도록 수정하기

만약 동적으로 생성된 드래그 가능한 요소에도 이 기능을 적용하고 싶다면, mousedown 이벤트를 캡처링하도록 수정해야 합니다. 이벤트 캡처링은 상위 요소부터 이벤트를 처리하는 방식입니다.

document.addEventListener("mousedown", function(event) {
  if (event.target.matches("#dragElement")) {
    offsetX = event.clientX - event.target.offsetLeft;
    offsetY = event.clientY - event.target.offsetTop;

    document.addEventListener("mousemove", onMouseMove);
    document.addEventListener("mouseup", onMouseUp);
  }
});

결론

이렇게 자바스크립트를 사용하여 요소를 동적으로 드래그 가능하도록 만들었습니다. 웹 애플리케이션에서 더 나은 상호작용성과 사용자 경험을 제공하기 위해 드래그 가능한 요소를 활용해보세요.

참고 자료