[javascript] 드래그 앤 드롭 요소의 커스터마이징

드래그 앤 드롭은 웹 애플리케이션에서 인터랙티브한 요소를 구현하는 데 유용한 기능 중 하나입니다. 이 기능을 사용하면 사용자가 마우스로 요소를 클릭하여 드래그한 후 해당 요소를 원하는 위치로 이동시킬 수 있습니다.

하지만 기본 드래그 앤 드롭 기능만으로는 디자인적인 요구사항을 충족시키기 어렵습니다. 이런 경우에는 드래그 앤 드롭 요소를 커스터마이징하여 원하는 스타일과 동작을 적용할 수 있습니다.

1. 드래그 앤 드롭 요소의 스타일 변경

드래그 앤 드롭 요소의 스타일을 변경하기 위해서는 CSS를 사용할 수 있습니다. dragover, dragenter, dragleave 등의 이벤트를 활용하여 요소가 드래그 중인 상태인지, 드롭 가능한 상태인지 등을 확인할 수 있습니다.

예를 들어, 드래그 중인 요소의 배경색을 변경하고 싶다면 다음과 같이 CSS를 적용할 수 있습니다:

.draggable {
  background-color: lightblue;
}

.draggable.dragging {
  background-color: lightgreen;
}

또는 드롭 가능한 영역에 들어왔을 때 스타일을 변경하고 싶다면, dragenterdragleave 이벤트를 사용하여 스타일을 동적으로 변경할 수 있습니다:

const dropZone = document.querySelector('#drop-zone');

dropZone.addEventListener('dragenter', function(event) {
  event.preventDefault();
  dropZone.classList.add('highlight');
});

dropZone.addEventListener('dragleave', function(event) {
  event.preventDefault();
  dropZone.classList.remove('highlight');
});

2. 드래그 앤 드롭 동작 변경

드래그 앤 드롭 동작을 변경하기 위해서는 JavaScript를 사용해야 합니다. dragstart, dragend, dragover, drop 등의 이벤트를 활용하여 원하는 동작을 구현할 수 있습니다.

예를 들어, 드래그 앤 드롭으로 이미지를 이동시키는 기능을 구현하려면 다음과 같이 JavaScript 코드를 작성할 수 있습니다:

const draggable = document.querySelector('.draggable');
const dropZone = document.querySelector('#drop-zone');

draggable.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('text/plain', 'This is draggable');
  draggable.classList.add('dragging');
});

draggable.addEventListener('dragend', function(event) {
  draggable.classList.remove('dragging');
});

dropZone.addEventListener('dragover', function(event) {
  event.preventDefault();
});

dropZone.addEventListener('drop', function(event) {
  event.preventDefault();
  const data = event.dataTransfer.getData('text/plain');
  dropZone.textContent = data;
});

위 코드에서는 dataTransfer 객체를 사용하여 드래그한 요소의 데이터를 설정하고, 드롭 영역에서 drop 이벤트가 발생했을 때 해당 데이터를 가져와 사용합니다.

결론

드래그 앤 드롭 요소의 커스터마이징은 사용자에게 더 좋은 사용자 경험을 제공하기 위해 중요한 작업입니다. CSS와 JavaScript를 활용하여 요소의 스타일과 동작을 원하는 대로 변경할 수 있습니다. 커스터마이징된 드래그 앤 드롭 요소를 구현하면 웹 애플리케이션의 사용성을 향상시킬 수 있습니다.

참고: MDN Web Docs - Drag and Drop