웹 앱을 개발할 때 할 일 목록을 구현하는 것은 일반적인 요구사항입니다. 할 일 목록에는 항목을 추가하고 수정하며, 드래그 앤 드롭 기능을 통해 항목들을 재정렬할 수 있는 기능이 필요합니다.
이 글에서는 JavaScript를 사용하여 드래그 앤 드롭 기능을 구현하는 방법에 대해 알아보겠습니다.
1. HTML 마크업 작성하기
할 일 목록을 구성하는 요소들을 HTML로 작성해야 합니다. 예를 들어, ul
태그와 각 항목의 li
태그를 사용하여 목록을 구성할 수 있습니다.
<ul id="todo-list">
<li draggable="true">할 일 1</li>
<li draggable="true">할 일 2</li>
<li draggable="true">할 일 3</li>
</ul>
2. 드래그 앤 드롭 이벤트 처리하기
JavaScript를 사용하여 드래그 앤 드롭 기능을 구현해야 합니다. 이를 위해 dragstart
, dragover
, drop
이벤트를 처리해야 합니다.
const items = document.querySelectorAll('#todo-list li');
let draggedItem = null;
items.forEach(item => {
item.addEventListener('dragstart', () => {
draggedItem = item;
});
item.addEventListener('dragover', e => {
e.preventDefault();
});
item.addEventListener('drop', e => {
e.preventDefault();
item.before(draggedItem);
});
});
위 코드에서 const items
는 드래그 앤 드롭이 가능한 항목들을 선택합니다. dragstart
이벤트는 드래그가 시작될 때 실행되고, 해당 항목을 draggedItem
변수에 할당합니다. dragover
이벤트는 드래그한 항목을 올릴 때 실행되고, 이벤트 기본 동작인 “항목을 올려놓는 것”을 취소합니다. drop
이벤트는 항목을 드롭했을 때 실행되고, item.before(draggedItem)
을 통해 항목의 위치를 변경합니다.
3. 추가 기능 구현하기
할 일 목록을 구현하는 데 있어서 추가적인 기능을 추가할 수 있습니다. 예를 들어, 새로운 항목을 추가하는 기능을 구현해보겠습니다.
const addButton = document.getElementById('add-button');
const input = document.getElementById('input-field');
addButton.addEventListener('click', () => {
const newItem = document.createElement('li');
newItem.draggable = true;
newItem.textContent = input.value;
input.value = '';
newItem.addEventListener('dragstart', () => {
draggedItem = newItem;
});
newItem.addEventListener('dragover', e => {
e.preventDefault();
});
newItem.addEventListener('drop', e => {
e.preventDefault();
newItem.before(draggedItem);
});
document.getElementById('todo-list').appendChild(newItem);
});
위 코드에서 addButton
은 추가 버튼 역할을 하고, input
은 새로운 항목의 내용을 입력하는 역할을 합니다. 이 버튼을 클릭하면 새로운 항목이 추가되고, 이 항목 역시 드래그 앤 드롭 기능을 가지도록 이벤트 리스너를 추가합니다.
결론
이전에 구현한 방법을 따라하면 드래그 앤 드롭 기능을 갖춘 웹사이트용 할 일 목록을 구현할 수 있습니다. 드래그 앤 드롭 기능은 사용자에게 직관적이고 편리한 사용자 경험을 제공할 수 있기 때문에 많이 사용되고 있습니다.