[javascript] 드래그 앤 드롭 효과를 활용한 웹사이트용 퀴즈 게임 구현 방법
이번 글에서는 자바스크립트의 드래그 앤 드롭 효과를 활용하여 웹사이트에 퀴즈 게임을 구현하는 방법에 대해 알아보겠습니다.
목차
드래그 앤 드롭 효과란?
드래그 앤 드롭(Drag and Drop) 효과는 사용자가 마우스로 요소를 끌어다 다른 위치로 이동시킬 수 있는 인터랙션 기능입니다. 이를 통해 사용자는 직관적이고 쉬운 방법으로 요소를 이동하거나 재배치할 수 있습니다.
퀴즈 게임 구현 준비하기
퀴즈 게임을 구현하기 위해 기본적으로 다음과 같은 요소들이 필요합니다:
- 문제와 선택지가 담긴 데이터
- 문제와 선택지를 표시할 HTML 요소
- 드래그 앤 드롭 이벤트를 처리할 JavaScript 코드
드래그 앤 드롭 효과 구현하기
자바스크립트의 드래그 앤 드롭 효과를 구현하기 위해서는 다음과 같은 단계를 따릅니다:
- 드래그할 요소에
draggable
속성을 추가합니다. - 드래그 시작(
dragstart
) 이벤트 리스너를 등록하여 드래그하는 요소의 데이터를 설정합니다. - 드롭 대상 요소에
dragover
이벤트 리스너를 등록하여 드롭 가능한 대상임을 설정합니다. - 드롭 대상 요소에
drop
이벤트 리스너를 등록하여 드롭이 완료된 후 처리할 로직을 구현합니다. - 드래그 대상 요소에
dragend
이벤트 리스너를 등록하여 드래그 동작이 종료될 때 필요한 작업을 수행합니다.
아래는 간단한 예시 코드입니다:
// 드래그 시작 이벤트 리스너
function handleDragStart(event) {
event.dataTransfer.setData("text/plain", event.target.id);
}
// 드롭 대상 요소 위에 올라갈 때의 이벤트 리스너
function handleDragOver(event) {
event.preventDefault();
}
// 드롭이 완료된 후의 이벤트 리스너
function handleDrop(event) {
event.preventDefault();
const id = event.dataTransfer.getData("text/plain");
const draggableElement = document.getElementById(id);
const dropzone = event.target;
dropzone.appendChild(draggableElement);
}
// 드래그 종료 이벤트 리스너
function handleDragEnd(event) {
// 드래그 종료 후 필요한 작업 수행
}
// 드래그 가능한 요소들에 이벤트 리스너 등록
const draggableElements = document.querySelectorAll(".draggable");
draggableElements.forEach((element) => {
element.addEventListener("dragstart", handleDragStart);
element.addEventListener("dragend", handleDragEnd);
});
// 드롭 대상 요소들에 이벤트 리스너 등록
const dropzoneElements = document.querySelectorAll(".dropzone");
dropzoneElements.forEach((element) => {
element.addEventListener("dragover", handleDragOver);
element.addEventListener("drop", handleDrop);
});
퀴즈 게임 화면 구현하기
퀴즈 게임 화면 구현을 위해 HTML과 CSS를 사용하여 문제와 선택지를 나타내는 요소들을 만들어야 합니다. 이 때, 드래그 앤 드롭 효과를 적용할 요소들은 draggable
속성을 추가해야 합니다.
<div class="quiz">
<div class="question">
<h2>퀴즈 질문</h2>
</div>
<div class="answers">
<div class="answer draggable" draggable="true" id="drag1">
<p>선택지 1</p>
</div>
<div class="answer draggable" draggable="true" id="drag2">
<p>선택지 2</p>
</div>
<div class="answer draggable" draggable="true" id="drag3">
<p>선택지 3</p>
</div>
</div>
<div class="dropzone">
<h3>정답을 이곳에 옮겨 놓으세요</h3>
</div>
</div>
퀴즈 게임 로직 구현하기
퀴즈 게임 로직을 구현하기 위해서는 선택지와 정답을 비교하여 결과를 판단해야 합니다. 이를 위해 JavaScript로 선택지와 정답의 정보를 가지고 있는 객체를 생성하고, 드롭이 완료된 후에 선택지와 정답을 비교하는 로직을 구현합니다.
// 퀴즈 데이터
const quizData = [
{
question: "질문 1",
answers: ["정답 1", "선택지 1", "선택지 2"],
correctAnswer: "정답 1",
},
{
question: "질문 2",
answers: ["선택지 1", "선택지 2", "정답 2"],
correctAnswer: "정답 2",
},
// ...
];
const draggables = document.querySelectorAll(".draggable");
const dropzone = document.querySelector(".dropzone");
// 정답 판별 함수
function checkAnswer(draggedElement, correctAnswer) {
if (draggedElement.textContent === correctAnswer) {
console.log("정답입니다!");
} else {
console.log("오답입니다.");
}
}
draggables.forEach((draggable) => {
draggable.addEventListener("dragend", function (event) {
const draggedElement = event.target;
const correctAnswer = draggedElement.dataset.correctAnswer;
checkAnswer(draggedElement, correctAnswer);
});
});
위의 코드에서 quizData
배열에 문제와 선택지, 정답을 정의하고, checkAnswer
함수를 이용하여 정답을 판단합니다. 드롭이 완료된 후에 checkAnswer
함수를 호출하여 선택지와 정답을 비교하고 결과를 출력합니다.
드래그 앤 드롭 효과를 활용한 웹사이트용 퀴즈 게임의 구현 방법에 대해 알아보았습니다. 이를 참고하여 자신만의 독특한 퀴즈 게임을 개발해보세요!