웹사이트에 인터랙티브한 퀴즈를 추가하고 싶다면, 드래그 앤 드롭 효과는 재미있고 시각적으로 매력적인 방법입니다. 이 튜토리얼에서는 JavaScript를 사용하여 드래그 앤 드롭 효과를 구현하는 방법을 알아보겠습니다.
1. HTML 구조
먼저, 퀴즈를 구성하는 HTML 요소를 작성해야 합니다. 각 질문과 선택지를 나타내기 위해 <div>
요소들을 사용하고, 드래그 앤 드롭을 처리하기 위해 draggable
속성을 추가해줍니다.
<div class="quiz-item" draggable="true">
<h2>질문 1</h2>
<p>선택지 1</p>
</div>
<div class="quiz-item" draggable="true">
<h2>질문 2</h2>
<p>선택지 2</p>
</div>
<!-- 나머지 질문과 선택지들 -->
2. JavaScript 드래그 앤 드롭 이벤트 핸들링
이제 JavaScript를 사용하여 드래그 앤 드롭 이벤트를 처리하는 함수를 작성해야 합니다. 먼저, .quiz-item
클래스를 가진 요소들을 선택하고 이벤트 리스너를 추가합니다.
document.querySelectorAll('.quiz-item').forEach(question => {
question.addEventListener('dragstart', dragStart);
question.addEventListener('dragend', dragEnd);
});
드래그 시작 시에는 dragStart
함수가 호출되고, 드래그가 끝날 때는 dragEnd
함수가 호출됩니다.
function dragStart() {
this.classList.add('dragging');
}
function dragEnd() {
this.classList.remove('dragging');
}
이렇게 하면 드래그 중인 요소에 dragging
클래스가 추가되고, 드롭이 완료되면 해당 클래스가 제거됩니다.
3. 드롭 영역 설정
드래그 앤 드롭된 요소를 받을 드롭 영역을 설정해야 합니다. 드롭 영역은 퀴즈의 정답이 들어갈 위치입니다. 이 예제에서는 quiz-container
라는 클래스를 가진 요소를 드롭 영역으로 사용합니다.
<div class="quiz-container">
<div class="drop-area"></div>
</div>
4. 드롭 영역 이벤트 핸들링
드롭 영역에서 발생하는 이벤트를 처리하기 위해 JavaScript를 사용합니다. 드롭 영역에는 dragenter
, dragleave
, dragover
, 그리고 drop
이벤트를 처리하는 함수를 추가합니다.
const dropArea = document.querySelector('.drop-area');
dropArea.addEventListener('dragenter', dragEnter);
dropArea.addEventListener('dragleave', dragLeave);
dropArea.addEventListener('dragover', dragOver);
dropArea.addEventListener('drop', dragDrop);
이제 각각의 이벤트에 대응하는 함수를 정의합니다.
function dragEnter(e) {
e.preventDefault();
this.classList.add('drag-enter');
}
function dragLeave() {
this.classList.remove('drag-enter');
}
function dragOver(e) {
e.preventDefault();
}
function dragDrop() {
this.classList.remove('drag-enter');
const droppedItem = document.querySelector('.dragging');
this.appendChild(droppedItem);
}
dragEnter
함수에서는 드래그 영역에 마우스가 진입했을 때, dragLeave
함수에서는 이 영역을 벗어났을 때 drag-enter
클래스를 추가 및 제거합니다. dragOver
함수에서는 브라우저의 기본 동작을 막고, dragDrop
함수에서는 드롭된 요소를 드롭 영역에 추가합니다.
5. 스타일링
마지막으로, 드래그 앤 드롭 효과를 시각적으로 보여주기 위해 CSS 스타일을 추가합니다.
.quiz-item {
background-color: #fff;
padding: 10px;
margin-bottom: 10px;
cursor: move;
}
.quiz-item.dragging {
opacity: 0.5;
}
.quiz-container {
border: 2px dashed #ccc;
padding: 10px;
}
.drop-area {
min-height: 100px;
background-color: #f5f5f5;
}
이제, 위의 코드를 웹사이트에 적용하면 인터랙티브한 드래그 앤 드롭 퀴즈가 구현됩니다.
이 튜토리얼에서는 JavaScript의 기본적인 드래그 앤 드롭 기능을 사용하여 퀴즈를 구현하는 방법을 알아보았습니다. 다양한 추가 기능을 적용할 수 있으며, 참고 자료와 레퍼런스를 통해 더 많은 기능을 익힐 수 있습니다.
Reference: