๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
EFFECT

[QUIZ] ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ06 : ์Šฌ๋ผ์ด๋“œ ํ˜•์‹

by _ํ† ๋งคํ†  2022. 8. 25.
728x90

ํ€ด์ฆˆ ๊ฐ๊ด€์‹ ์œ ํ˜• : ์Šฌ๋ผ์ด๋“œ ํ˜•์‹

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ํ€ด์ฆˆ๋ฅผ ์Šฌ๋ผ์ด๋“œ ํ˜•์‹์œผ๋กœ ์ œ์ž‘ํ•ด๋ด…์‹œ๋‹ค!
๊ทธ ๋’ค ์ •๋‹ต ๊ฐฏ์ˆ˜์™€ ๋ฌธ์ œ์˜ ์ด ๊ฐฏ์ˆ˜, ์ด ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์‹์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.


! ๋ฏธ๋ฆฌ ๋ณด๊ธฐ !


#1. ํ€ด์ฆˆ ์ธํฌ (๋ฌธ์ œ ๋ชจ์Œ) ๋งŒ๋“ค๊ธฐ

๋ฐ์ดํ„ฐ ์ €์žฅ ํƒ€์ž…์ธ ๋ฐฐ์—ด์•ˆ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ํ€ด์ฆˆ ๋ฌธ์ œ๋ฅผ ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐํ™” ์‹œ์ผœ ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค.
์ง€๋‚œ ํ€ด์ฆˆ์™€ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด์•ˆ์— ๋˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค.

const quizInfo = [
    {
        answerType : "์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ 2015๋…„ 01ํšŒ",
        answerNum : "1",
        answerAsk : "์›น ๋””์ž์ธ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฒƒ์€?",
        answerChoice : [
            "์›น ํŽ˜์ด์ง€๋ฅผ ๋””์ž์ธํ•˜๊ณ  ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.",
            "์›น ๋””์ž์ธ์€ ๊ฐœ์ธ์šฉ ํ™ˆํŽ˜์ด์ง€ ์ด์™ธ์— ๊ธฐ์—…์šฉ ๋“ฑ ๋‹ค์–‘ํ•˜๋‹ค.",
            "์›น ๋””์ž์ธ์€ Web๊ณผ Design์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์ด ๊ฒฐํ•ฉ๋œ ๊ฒƒ์ด๋‹ค.",
            "๊ธฐ์—…, ๋‹จ์ฒด, ํ–‰์‚ฌ์˜ ํŠน์ง•๊ณผ ์„ฑ๊ฒฉ์— ๋งž๋Š” ์‹œ๊ฐ์  ์ƒ์ง•๋ฌผ์„ ๋งํ•œ๋‹ค.",
        ],
        answerResult : "๊ธฐ์—…, ๋‹จ์ฒด, ํ–‰์‚ฌ์˜ ํŠน์ง•๊ณผ ์„ฑ๊ฒฉ์— ๋งž๋Š” ์‹œ๊ฐ์  ์ƒ์ง•๋ฌผ์„ ๋งํ•œ๋‹ค.",
        answerEx : "๊ธฐ์—…์„ ์ƒ์ง•ํ•˜๋Š” ๊ฒƒ์€ CI์ด๋‹ค.",
    },
    {
        answerType : "์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ 2015๋…„ 01ํšŒ",
        answerNum : "2",
        answerAsk : "๋””์ž์ธ์˜ ์‹ฌ๋ฏธ์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๋งž๋Š” ๊ฒƒ์€?",
        answerChoice : [
            "์•„๋ฆ„๋‹ค์›€์„ ๋Š๋ผ๋Š” ๋ฏธ์  ์˜์‹์ด๋ฉฐ ์ฃผ๊ด€์ ์ผ ์ˆ˜ ์žˆ๋‹ค.",
            "๊ฐ์„ฑ์ ์ธ ๋ถ€๋ถ„์œผ๋กœ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค.",
            "ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ ๊ฐ๊ด€์ ์ธ ๋ฏธ์  ํ™œ๋™์ด๋‹ค.",
            "๊ตญ๊ฐ€, ๋ฏผ์กฑ, ๊ด€์Šต, ์‹œ๋Œ€์™€ ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค.",
    ],
        answerResult : "์•„๋ฆ„๋‹ค์›€์„ ๋Š๋ผ๋Š” ๋ฏธ์  ์˜์‹์ด๋ฉฐ ์ฃผ๊ด€์ ์ผ ์ˆ˜ ์žˆ๋‹ค.",
        answerEx : "์‹ฌ๋ฏธ์„ฑ : ํ˜•ํƒœ์™€ ์ƒ‰์ฑ„์กฐํ™”๋ฅผ ์ด๋ฃจ์–ด '์•„๋ฆ„๋‹ค์›€'์˜์„ฑ์ง•์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ ๋Œ€์ค‘ํ˜•์˜ ์กฐํ˜•์„ฑ์ด๋ผ๊ณ ๋„ ๋งํ•˜๋ฉฐ, ์‹œ๋Œ€์ ์ธ ๋ฏธ์˜ ๊ธฐ์ค€, ์‚ฌํšŒ์ ์ธ ๊ฐœ์„ฑ์— ๋”ฐ๋ผ ๋ณ€ํ™”๋œ๋‹ค.",
    },
    {
        answerType : "์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ 2015๋…„ 01ํšŒ",
        answerNum : "3",
        answerAsk : "๋™์‹œ ๋Œ€๋น„์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€?",
        answerChoice : [
            "์ƒ‰์ƒ ๋Œ€๋น„",
            "๋ช…๋„ ๋Œ€๋น„",
            "๋ณด์ƒ‰ ๋Œ€๋น„",
            "ํ•œ๋‚œ ๋Œ€๋น„",
        ],
        answerResult : "ํ•œ๋‚œ ๋Œ€๋น„",
        answerEx : "์„œ๋กœ ๊ฐ€๊นŒ์ด ๋†“์—ฌ์ง„ ๋‘๊ฐœ ์ด์ƒ์˜ ์ƒ‰์„ ๋™์‹œ์— ๋ณผ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ƒ‰์ฑ„๋Œ€๋น„๋ฅผ ๋งํ•œ๋‹ค. ๋™์‹œ๋Œ€๋น„๋Š” ์ƒ‰์ฑ„์˜ 3์†์„ฑ๋“ค์˜ ์ฐจ์ด์— ๋”ฐ๋ฅธ ์ง€๊ฐ๋ณ€ํ™”์— ๋”ฐ๋ผ์„œ ๋ช…๋„๋Œ€๋น„, ์ƒ‰์ƒ๋Œ€๋น„, ์ฑ„๋„๋Œ€๋น„, ๋ณด์ƒ‰๋Œ€๋น„๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์‹ฌ๋ฆฌ์— ๊ด€ํ•œ ์ƒ‰์šฉ์–ด. ์„œ๋กœ ๋ฐ˜๋Œ€๋˜๊ฑฐ๋‚˜ ๋Œ€๋‹จํžˆ ํ‹€๋ฆฌ๋Š” ๊ฐ๊ฐ, ๊ฐ์ • ๋“ฑ์ด ๋™์‹œ์— ๋น„๊ตํ•˜๋ฉด, ๊ทธ ํ•œ์ชฝ ๋˜๋Š” ์–‘์ชฝ์˜ ํŠน์„ฑ์ด ํ•œ์ธต ๋ช…๋ฐฑํ•ด ์ง€๋Š” ์ผ. ์˜ˆ๋ฅผ๋“ค๋ฉด, ๋˜‘๊ฐ™์€ ํšŒ์ƒ‰์˜ ์›(ๅœ“)์„ ํฐ์ข…์ด์™€ ๊ฒ€์€ ์ข…์ด ์œ„์— ๋†“๊ณ  ๋ณผ ๋•Œ ๊ฒ€์€์ข…์ด ์œ„์—์„œ๋Š” ํฌ๊ฒŒ ๋ณด์ด๊ณ , ํฐ์ข…์ด ์œ„์—์„œ๋Š” ๊ฒ€๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ ๋“ฑ์ด ๋™์‹œ์  ๋Œ€๋น„์ด๋‹ค.",
    },...........
    //์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ญ‰ ๋‚˜์—ดํ•ด์ค๋‹ˆ๋‹ค.

#2. ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ€ด์ฆˆ ๋ฌธ์ž์—ด ๋„ฃ๊ธฐ

๋ฐ์ดํ„ฐ๋ฅผ ์‹คํ–‰ํ•ด ์ค„ ํ•จ์ˆ˜์•ˆ์— ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๋‹น ๋ž€์— ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค!
์ด ๋•Œ ์ƒ์ˆ˜ ์•ˆ์— ์ €์žฅํ•  ๊ฐ’์€ html๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— html๋กœ ์ž‘์—…ํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์€ ์ฃผ์„์ฒ˜๋ฆฌ ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค!

//์„ ํƒ์ž
const quizType = document.querySelector(".quiz__type");                 //ํ€ด์ฆˆ ํƒ€์ž…
const quizQuestion = document.querySelector(".quiz__question");         //๋ฌธ์ œ ๋ฒˆํ˜ธ์™€ ์งˆ๋ฌธ์„ quizQuestion ์ƒ์ˆ˜์— ์ €์žฅ
const quizSelects = document.querySelector(".quiz__selects");           //๊ฐ๊ด€์‹ ๋ณด๊ธฐ
const quizResult = document.querySelector(".quiz__answer .result");     //๋ฌธ์ œ ์ •๋‹ต
const quizCunfirm = 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>
    `;


    //๋ฌธ์ œ ์ถœ๋ ฅ
    quizType.innerHTML = quizInfo[index].answerType;    //ํ€ด์ฆˆ ์ข…๋ฅ˜
    quizQuestion.innerHTML = questionTag;               //quizQuestion์— questionTag์— ์ €์žฅ๋œ ๋ฌธ์ œ ๋ฒˆํ˜ธ์™€ ์งˆ๋ฌธ์„ innerHTML์„ ํ†ตํ•ด ๋„ฃ์–ด์ค€๋‹ค.
    quizSelects.innerHTML = choiceTag;                  //๊ฐ๊ด€์‹ ๋ฌธํ•ญ
    quizResult.innerHTML = quizInfo[index].answerEx;    //ํ•ด์„ค
    

    const quizChoice = quizSelects.querySelectorAll(".choice"); //๋ณด๊ธฐ๊ฐ€ 4๊ฐœ๋ผ์„œ all์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‘ ์„ ํƒํ•ด์ค€๋‹ค.

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

    //๋ฌธ์ œ์™€ ํ•ด์„ค ์ˆจ๊ธฐ๊ธฐ
    quizResult.style.display = "none";
    quizCunfirm.style.display = "none";
}
updateQuiz(quizCount); //์‹คํ–‰๋ฌธ

#3. ํ•จ์ˆ˜์™€ ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•˜์—ฌ ์ •๋‹ต ํ™•์ธํ•˜๊ธฐ
+ ๋ฌธ์ œ ๊ฐฏ์ˆ˜์™€ ๋งžํžŒ ๊ฐฏ์ˆ˜ ํ™•์ธํ•˜๊ธฐ

์ต๋ช… ํ•จ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜, if๋ฌธ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๊ฐ’๊ณผ ์ •๋‹ต ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ์‹์„ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์‹๋„ ๊ตฌํ•ด๋ด…์‹œ๋‹ค!

//์ •๋‹ต ํ™•์ธํ•˜๊ธฐ
const choiceSelected = (answer) => {
    let userAnswer = answer.textContent;    //์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ์ •๋‹ต
    let currentAnswer = quizInfo[quizCount].answerResult; //๋ฌธ์ œ ์ •๋‹ต

    if(userAnswer == currentAnswer){
        quizView.classList.add("like");
        quizScore++; //์ •๋‹ต์ผ ๋•Œ ๋งˆ๋‹ค Score ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ธฐ
        console.log("์ •๋‹ต");
    } else {
        quizView.classList.add("dislike");
        quizResult.style.display = "block";
        console.log("์˜ค๋‹ต");
    }
    quizCunfirm.style.display = "block";
}

// ์ •๋‹ต ํ™•์ธ ํ›„ ๋‹ค์Œ๋ฌธ์ œ ์ข…๋ฃŒ์™€ ๊ฐฏ์ˆ˜ ํ™•์ธ
const answerQuiz = () => {
    //๋งˆ์ง€๋ง‰ ๋ฌธ์ œ ์™„๋ฃŒ ํ›„ ์ข…๋ฃŒ
    let scoreSet = Math.floor(quizScore * 100 / quizInfo.length); // ์ ์ˆ˜ ๊ตฌํ•˜๋Š” ์‹(๋งžํžŒ ๊ฐฏ์ˆ˜ x 100 ๋‚˜๋ˆ„๊ธฐ ์ด ๋ฌธ์ œ ๊ฐฏ์ˆ˜)๋ฅผ scoreSet์— ๋Œ€์ž…
    if(quizInfo.length -1 == quizCount){     // quizInfo.length๋Š” ๊ธธ์ด ๊ฐ’์ด์ง€๋งŒ ํ€ด์ฆˆ ์นด์šด๋“œ๋Š” ์ธ๋ฑ์Šค ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— -1์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
        if(scoreSet >= 60){ //์œ„ ์กฐ๊ฑด์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ scoreSet์ด ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ์ฐธ, ํ‹€๋ฆฌ๋ฉด ๊ฑฐ์ง“์„ ๋ฐ˜ํ™˜.
            quizCunfirm.textContent = `๋‹น์‹ ์€ ์ด ${quizInfo.length}๋ฌธ์ œ ์ค‘ ${quizScore}๋ฌธ์ œ๋ฅผ ๋งž์ถ”์…จ์Šต๋‹ˆ๋‹ค. ์ ์ˆ˜: ${scoreSet}์  ! ํ•ฉ๊ฒฉ !`;
        } else {
            quizCunfirm.textContent = `๋‹น์‹ ์€ ์ด ${quizInfo.length}๋ฌธ์ œ ์ค‘ ${quizScore}๋ฌธ์ œ๋ฅผ ๋งž์ถ”์…จ์Šต๋‹ˆ๋‹ค. ์ ์ˆ˜: ${scoreSet}์  ! ๋ถˆํ•ฉ๊ฒฉ !`;
        } 
    }

    quizCount++;
    updateQuiz(quizCount);
    quizView.classList.remove("like", "dislike"); //๋‹ค์Œ ๋ฌธ์ œ ํด๋ฆญ์‹œ ๊ฐ•์•„์ง€ ํ‘œ์ ฑ ๋ฆฌ์…‹
} 

quizCunfirm.addEventListener("click", answerQuiz);
728x90

๋Œ“๊ธ€


Lucky Charms Rainbow
js
html
css