[javascript] 드래그 앤 드롭 기능을 사용하여 웹사이트에서 요소 간의 연결 기능 추가하기

웹사이트에서 요소를 드래그하여 다른 요소에 드롭하고 연결하는 기능은 사용자 경험을 향상시키고 작업을 효율적으로 수행하는 데 도움이 됩니다. 이번 블로그 포스트에서는 JavaScript를 사용하여 드래그 앤 드롭 기능을 구현하는 방법을 알아보겠습니다.

HTML 구조 설정하기

먼저 드래그 앤 드롭 기능을 구현할 HTML 구조를 설정해야 합니다. 예를 들어, 다음과 같이 두 개의 요소를 가지는 div 컨테이너를 만들어 보겠습니다.

<div id="container">
  <div class="draggable">요소 1</div>
  <div class="draggable">요소 2</div>
</div>

JavaScript로 드래그 앤 드롭 이벤트 처리하기

이제 JavaScript를 사용하여 드래그 앤 드롭 이벤트를 처리할 수 있는 기능을 추가해보겠습니다. 먼저 draggable 클래스를 가진 요소를 선택하고 드래그 가능하도록 만듭니다.

const draggableElements = document.querySelectorAll('.draggable');

draggableElements.forEach(element => {
  element.addEventListener('dragstart', () => {
    element.classList.add('dragging');
  });

  element.addEventListener('dragend', () => {
    element.classList.remove('dragging');
  });
});

위 코드에서는 querySelectorAll 함수를 사용하여 .draggable 클래스를 가진 모든 요소를 선택하고, 각 요소에 dragstart 이벤트 리스너와 dragend 이벤트 리스너를 추가합니다. dragstart 이벤트가 발생하면 해당 요소에 dragging 클래스가 추가되고, dragend 이벤트가 발생하면 dragging 클래스가 제거됩니다.

드롭 영역 설정하기

드롭 영역은 드래그 앤 드롭한 요소를 받아들일 영역을 의미합니다. 이 예시에서는 container 요소가 드롭 영역으로 사용됩니다. 드롭 영역에 dragover 이벤트 리스너를 추가하여 드래그한 요소를 받아들이도록 만듭니다.

const container = document.getElementById('container');

container.addEventListener('dragover', event => {
  event.preventDefault();
});

dragover 이벤트는 기본 동작이 요소를 드롭할 수 없게 만드므로, preventDefault 함수를 호출하여 해당 동작을 취소합니다.

드롭된 요소 처리하기

마지막으로 드롭된 요소를 처리하는 코드를 추가해보겠습니다. container 요소에 drop 이벤트 리스너를 추가하여 드롭한 요소를 받아 처리합니다.

container.addEventListener('drop', event => {
  event.preventDefault();
  
  const draggedElement = document.querySelector('.dragging');
  container.appendChild(draggedElement);
});

drop 이벤트가 발생하면 기본 동작이 드롭한 요소를 다른 페이지로 이동시키므로, preventDefault 함수를 호출하여 해당 동작을 취소합니다. 그 후, document.querySelector('.dragging')을 사용하여 dragging 클래스를 가진 요소를 선택하고, appendChild 함수를 사용하여 해당 요소를 container에 추가합니다.

결과 확인하기

이제 웹페이지를 열고 요소를 드래그하여 다른 요소에 드롭해보시면 요소가 연결되는 것을 확인할 수 있습니다.

드래그 앤 드롭 기능을 사용하여 웹사이트에서 요소 간의 연결 기능을 추가하는 방법에 대해 알아보았습니다. 이를 활용하면 사용자들은 쉽고 편리하게 작업을 수행할 수 있으며, 보다 직관적인 인터페이스를 제공할 수 있습니다.

더 많은 정보를 얻고 싶다면, 다음 자료를 참조해보세요: