[javascript] 드래그 앤 드롭 효과를 사용한 웹사이트용 대시보드 구현 방법

드래그 앤 드롭(Drag and Drop) 효과는 사용자가 요소를 마우스로 끌어서 다른 위치로 이동시키는 기능입니다. 이 기능을 활용하여 웹사이트용 대시보드를 구현하는 방법에 대해 알아보겠습니다.

HTML 구조 설정

먼저 HTML 구조를 설정합니다. 대시보드에 들어갈 요소들을 적절한 태그로 구성합니다. 예를 들면, 여러 개의 위젯을 드래그 앤 드롭으로 이동시킬 수 있는 대시보드를 구현한다고 가정해봅시다. 이 경우, 각 위젯은 <div> 태그로 표현될 수 있습니다.

<div id="dashboard">
  <div class="widget" draggable="true">
    <!-- 위젯 내용 -->
  </div>
  <div class="widget" draggable="true">
    <!-- 위젯 내용 -->
  </div>
  <!-- 추가 위젯들 -->
</div>

드래그 앤 드롭 이벤트 처리

다음으로, JavaScript를 이용하여 드래그 앤 드롭 이벤트를 처리합니다. 이를 위해, dragstart, dragend, dragenter, dragover, dragleave, drop 이벤트를 사용할 수 있습니다.

const widgets = document.getElementsByClassName('widget');
const dashboard = document.getElementById('dashboard');

let draggedWidget = null;

function handleDragStart(event) {
  draggedWidget = this;
  event.dataTransfer.effectAllowed = 'move';
  event.dataTransfer.setData('text/plain', null);
}

function handleDragEnd() {
  draggedWidget = null;
}

function handleDragOver(event) {
  if (event.preventDefault) {
    event.preventDefault();
  }
  event.dataTransfer.dropEffect = 'move';
  return false;
}

function handleDragEnter() {
  this.classList.add('over');
}

function handleDragLeave() {
  this.classList.remove('over');
}

function handleDrop(event) {
  if (event.stopPropagation) {
    event.stopPropagation();
  }
  if (draggedWidget !== this) {
    dashboard.insertBefore(draggedWidget, this);
  }
  return false;
}

for (let i = 0; i < widgets.length; i++) {
  widgets[i].addEventListener('dragstart', handleDragStart, false);
  widgets[i].addEventListener('dragend', handleDragEnd, false);
  dashboard.addEventListener('dragover', handleDragOver, false);
  dashboard.addEventListener('dragenter', handleDragEnter, false);
  dashboard.addEventListener('dragleave', handleDragLeave, false);
  dashboard.addEventListener('drop', handleDrop, false);
}

스타일링

드래그 앤 드롭 효과를 시각적으로 나타내기 위해 CSS를 이용하여 스타일링할 수 있습니다. 예를 들어, 드래그되는 위젯을 투명도가 낮은 상태로 나타내거나, 드롭 가능한 영역에 강조 효과를 줄 수 있습니다.

.widget {
  /* 위젯 스타일 지정 */
}

.widget.over {
  /* 드롭 가능한 영역 스타일 지정 */
  /* 예: 배경색 변경 */
}

이렇게하면 드래그 앤 드롭 효과를 사용한 웹사이트용 대시보드를 구현할 수 있습니다!

참고 자료