본문 바로가기
EFFECT

Quiz 03

by 코빈_ 2022. 8. 5.

Quiz 03

웹디자인기능사 필기 시험에 나오는 주관식 문제를 코딩으로 만들어 풀어보세요.
자바스크립트를 이용해 퀴즈 형태 방식을 코딩

자바스크립트

데이터 값의 입력과 for문을 사용

    // 선택자
    const quizType = document.querySelectorAll(".quiz__type");                             // 퀴즈 종류
    const quizNumber = document.querySelectorAll(".quiz__question .number");       // 퀴즈 번호
    const quizAsk = document.querySelectorAll(".quiz__question .ask");                   // 퀴즈 질문
    const quizConfirm = document.querySelectorAll(".quiz__answer .confirm");         // 정답 확인 버튼
    const quizResult = document.querySelectorAll(".quiz__answer .result");              // 정답 결과
    const quizInput = document.querySelectorAll(".quiz__answer .input");                // 사용자 정답
    const quizView = document.querySelectorAll(".quiz__view");                             // 강아지     

    // 문제정보
    const quizInfo = [      // 상수로 데이터 저장
        {
            answerType: "웹디자인 기능사 2016년 1회",
            answerNum: "1",
            answerAsk: "요소들이 상호 관계를 가지고 균형감이 안정적으로 이루어진 상태이며, 미적 대상을 구상하는 부분과 부분의 사이에 질적으로나 양적으로 모순되는 일 없이 질서가 잡혀있는 것은?",
            answerResult: "조화"
        },
        {
            answerType: "웹디자인 기능사 2016년 1회",
            answerNum: "2",
            answerAsk: "저드(D.B.judd)의 “색채 조화론”에 포함되는 원리를 2가지 이상 쓰시오",
            answerResult: "질서의 원리, 유사의 원리, 친근감의 원리, 명료성(비모호성)의 원리 등"
        },
        {
            answerType: "웹디자인 기능사 2016년 1회",
            answerNum: "3",
            answerAsk: "한국산업표준(KS)에 따른 색의 3속성은 무엇인가요?",
            answerResult: "Hue, Value, Chroma"
        },
        {
            answerType: "웹디자인 기능사 2016년 1회",
            answerNum: "4",
            answerAsk: "같은 크기의 형을 상, 하로 겹칠 때 위쪽의 것이 크게 보이는 착시현상은?",
            answerResult: "상방 거리의 과대착시"
        },
    ];

    // 문제 출력
    for(let i=0; i<quizInfo.length; i++) {   // 숫자 대신 quizInfo.length을 사용하여 갯수 입력
        quizType[i].textContent = quizInfo[i].answerType;
        quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
        quizAsk[i].textContent = quizInfo[i].answerAsk;
        quizResult[i].textContent = quizInfo[i].answerResult;
    }

    // 정답 숨기기
    for(let i=0; i<quizInfo.length; i++) {            // 숫자 대신 quizInfo.length을 사용하여 갯수 입력
        quizResult[i].style.display = "none";        // for문 안에 출력 값으로 논을 입력
    }

    // 정답 확인
    quizConfirm.forEach((btn, num) => {
        btn.addEventListener("click", () => {
            
            // 사용자 정답
            const userWord = quizInput[num].value.toLowerCase().trim();   // 소문자 전환과 여백 삭제 toLowerCase, trim
            
            // console.log(userWord)
            // console.log(quizInfo[num].answerResult)
            
            // 사용자 정답 == 문제 정답
            if(userWord == quizInfo[num].answerResult) {
                // 정답
                quizView[num].classList.add("like");
                quizConfirm[num].style.display = "none";
            } else {
                // 오답
                quizView[num].classList.add("dislike");
                quizResult[num].style.display = "block"
                quizInput[num].style.display = "none";
            }
        })
    });

문제 출력 forEach 사용 방법

    quizInfo.forEach((e, i) => {
        quizType[i].textContent = quizInfo[i].answerType;
        quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
        quizAsk[i].textContent = quizInfo[i].answerAsk;
        quizResult[i].textContent = quizInfo[i].answerResult;
    });

정답 숨기기 forEach 사용 방법

    quizInfo.forEach((e, i) => {
        quizResult[i].style.display = "none";   // 객체 값으로 출력
    });

'EFFECT' 카테고리의 다른 글

Search 02  (2) 2022.08.17
Search 01  (2) 2022.08.17
Quiz 04  (10) 2022.08.08
Quiz 02  (12) 2022.08.04
Quiz 01  (12) 2022.08.04

댓글


INFORMATION

javascript

css

html