본문 바로가기
Effect

QuizEffect05

by 코터틀 2022. 8. 18.
반응형

quizEffect05

2016년 04회차 웹디자인 기능사 시험 기출문제입니다.
열심히 풀어서 100점을 맞아봐요!


자바스크립트

문제 정보는 이전과 동일하므로 생략하고 선택자부터 넣었습니다.
퀴즈04번과 동일하게 빈배열인 exam 상수를 선언하고 내부에 forEach문, push(``(리터럴))을 사용하여 html 태그를 넣고 ${}표현식에 변수를 넣어 문제가 출력되도록 하였습니다.
추가적으로, 60개의 문제중 36개 정답을 기준으로 합격과 탈락이 출력되도록 삼항연산자를 사용하여 입력해주었습니다.

//선택자
const quizWrap = document.querySelector(".quiz__wrap");

let quizScore = "";
//문제 출력
const updateQuiz = () => {
    const exam = [];

    quizInfo.forEach((question, number) => {
        exam.push(`
        <div class="quiz">
            <span class="quiz__type">${question.answerType}</span>
            <h2 class="quiz__question">
                <span class="number">${question.answerNum}. </span>
                <div class="ask">${question.answerAsk}</div>
            </h2>
        <div class="quiz__view">
            <div class="true">정답입니다!</div>
            <div class="false">오답입니다!</div>
            <div class="dog">
                <div class="head">
                    <div class="ears"></div>
                    <div class="face"></div>
                    <div class="eyes">
                        <div class="teardrop"></div>
                    </div>
                    <div class="nose"></div>
                    <div class="mouth">
                        <div class="tongue"></div>
                    </div>
                    <div class="chin"></div>
                </div>
                <div class="body">
                    <div class="tail"></div>
                    <div class="legs"></div>
                </div>
            </div>
        </div>
            <div class="quiz__answer">
                <div class="quiz__selects">
                    <label for="select1${number}">
                        <input type="radio" id="select1${number}" class="select" name="select${number}" value="1">
                        <span class="choice">${question.answerChoice[1]}</span>
                    </label>
                    <label for="select2${number}">
                        <input type="radio" id="select2${number}" class="select" name="select${number}" value="2">
                        <span class="choice">${question.answerChoice[2]}</span>
                    </label>
                    <label for="select3${number}">
                        <input type="radio" id="select3${number}" class="select" name="select${number}" value="3">
                        <span class="choice">${question.answerChoice[3]}</span>
                    </label>
                    <label for="select4${number}">
                        <input type="radio" id="select4${number}" class="select" name="select${number}" value="4">
                        <span class="choice">${question.answerChoice[4]}</span>
                    </label>
                </div>
            </div>
        </div>
        `);
    });
    exam.push(`
        <div class="quiz__confirm">
            <button class="check">정답 확인하기</button>
            <div class="ex"></div>
        </div>
    `)

    quizWrap.innerHTML = exam.join('');
}
updateQuiz();

//정답 확인

const answerQuiz = () => {
    const quizSelects = document.querySelectorAll(".quiz__selects");    //객관식 보기
    document.querySelector(".quiz__confirm .check").style.display = "none";     //한번 실행하고 정답 확인하기를 숨깁니다.

    //사용자가 체크한 보기 == 문제 정답
    quizInfo.forEach((question, number) => {
        const userSelector = `input[name=select${number}]:checked`;     //사용자가 체크한 것
        const quizSelectsWrap = quizSelects[number];
        const userAnswer = (quizSelectsWrap.querySelector(userSelector) || {}).value;
        const quizView = document.querySelectorAll(".quiz__view");        //강아지

        console.log(userAnswer)
        if (userAnswer == question.answerResult) {
            // console.log("정답");
            quizView[number].classList.add("like");
            quizScore++;
        } else {
            // console.log("오답");
            quizView[number].classList.add("dislike");
            const divBox = document.createElement("div");
            quizSelectsWrap.appendChild(divBox).innerHTML = `<p class="result">${question.answerEx}</p>`;
        }

        // 종합 점수
        document.querySelector(".quiz__confirm .ex").innerHTML =
            `${quizScore < 36 ? quizInfo.length + "/" + quizScore + " 탈락입니다!" : quizInfo.length + "/" + quizScore + " 합격입니다!"}`;
    });
    //전체 문제 수
    // console.log(quizInfo.length);

    //내가 맞힌 수
    // console.log(quizScore);
    
}
//정답 클릭
document.querySelector(".quiz__confirm .check").addEventListener("click", answerQuiz);
반응형

'Effect' 카테고리의 다른 글

QuizEffect06  (10) 2022.08.24
SearchEffect03  (4) 2022.08.22
SearchEfferct02  (5) 2022.08.17
SearchEffect01  (5) 2022.08.16
QuizEffect04  (12) 2022.08.08

댓글


광고 준비중입니다.