본문 바로가기
EFFECT

Quiz 06

by 코빈_ 2022. 8. 24.

Quiz 06

이번 시간에는 스크롤 형식이 아닌 슬라이드 형식으로 퀴즈 문제를 만들어 봤습니다.

자바스크립트

데이터 값의 입력과 함수와 for문을 사용했습니다.
이번에는 문제를 풀 시 슬라이드 형식으로 넘어가는 걸로 바꿨으며,
틀린 답을 체크하고 정답 확인 시 정답에 대한 해설이 나오도록 설정했습니다.

코드 보기
    // 선택자
    const quizType = document.querySelector(".quiz__type");                           // 시험 날짜
    const quizQuestion = document.querySelector(".quiz__question");              // 문제 번호, 질문
    const quizSelects = document.querySelector(".quiz__selects");                   // 객관식 보기
    const quizResult = document.querySelector(".quiz__answer .result")          // 해설
    const quizConfirm = document.querySelector(".quiz__answer .confirm")    // 정답 확인 버튼
    const quizView = document.querySelector(".quiz__view")                            // 강아지

    let quizCount = 0;
    let quizScore = 0;

    // 문제 출력
    const updateQuiz = (index) => {
        const questionTag = `
            <span class="number">${quizInfo[index].answerNum}. </span>
            <div class="ask">${quizInfo[index].answerAsk}</div>
        `;
        const choiceTag = `
            <label for="select1">
                <input type="radio" id="select1" class="select" name="select" value="1">
                <span class="choice">${quizInfo[index].answerChoice[0]}</span>
            </label>
            <label for="select2">
                <input type="radio" id="select2" class="select" name="select" value="2">
                <span class="choice">${quizInfo[index].answerChoice[1]}</span>
            </label>
            <label for="select3">
                <input type="radio" id="select3" class="select" name="select" value="3">
                <span class="choice">${quizInfo[index].answerChoice[2]}</span>
            </label>
            <label for="select4">
                <input type="radio" id="select4" class="select" name="select" value="4">
                <span class="choice">${quizInfo[index].answerChoice[3]}</span>
            </label>
        `;

        // 문제 출력
        quizQuestion.innerHTML = questionTag;          // 번호, 질문
        quizSelects.innerHTML = choiceTag;                // 객관식
        quizType.innerHTML = quizInfo[index].answerType     // 시험 날짜
        quizResult.innerHTML = quizInfo[index].answerEx      // 해설

        const quizChoice = quizSelects.querySelectorAll(".choice");

        for(let i=0; i<quizChoice.length; i++) {
            quizChoice[i].setAttribute("onclick", "choiceSelected(this)")
        }

        // 문제, 해설 숨기기
        quizResult.style.display = "none";
        quizConfirm.style.display = "none";

    }
    
    updateQuiz(quizCount);

    const choiceSelected = (answer) => {
        let userAnswer = answer.textContent;                                 // 사용자가 체크한 정답
        let currentAnswer = quizInfo[quizCount].answerResult;      // 문제 정답

        if(userAnswer == currentAnswer) {
            console.log("정답")
            quizView.classList.add("like");
            quizScore++;
        } else {
            console.log("오답")
            quizView.classList.add("dislike");
            quizResult.style.display = "block";
        }
        quizConfirm.style.display = "block"
    }

    // 정답 확인 버튼
    const answerQuiz = () => {
        if (quizInfo.length - 1 == quizCount) {
            quizConfirm.textContent = `총 ${quizInfo.length} 문제 중에 ${quizScore} 문제를 맞추었습니다.`;
        }       //마지막 문제 완료 후 정답 갯수 확인
        quizCount++;
        updateQuiz(quizCount);
        quizView.classList.remove("like", "dislike");
    }
    quizConfirm.addEventListener("click", answerQuiz);

'EFFECT' 카테고리의 다른 글

Slider 02  (5) 2022.08.29
Slider 01  (5) 2022.08.29
Quiz 05  (4) 2022.08.24
Search 03  (3) 2022.08.22
Search 02  (2) 2022.08.17

댓글


INFORMATION

javascript

css

html