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

[QUIZ] ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ05 : ๊ฐ๊ด€์‹ 60๋ฌธ์ œ

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

ํ€ด์ฆˆ ๊ฐ๊ด€์‹ ์œ ํ˜• : 60๋ฌธ์ œ

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


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


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

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

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

#2. push()์™€ join()์„ ํ†ตํ•ด ํ€ด์ฆˆ ๋ฌธ์ž์—ด ๋„ฃ๊ธฐ

๋ฐ์ดํ„ฐ๋ฅผ ์‹คํ–‰ํ•ด ์ค„ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ๋’ค push()์™€ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑ ํ•  ``(๋ฐฑํ‹ฑ), ${} ๊ทธ๋ฆฌ๊ณ  join('')์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์•ˆ์— ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด ์ค์‹œ๋‹ค!
์ด ๋•Œ push๋กœ ๊ฐ€์ ธ ์˜ฌ ๊ฒƒ์€ html๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— html๋กœ ์ž‘์—…ํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์€ ์ฃผ์„์ฒ˜๋ฆฌ ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค!

const updateQuiz = () => {
const exam = []; //๋ฌธ์ž์—ด์„ ๋„ฃ์„ ๋ฐฐ์—ด์„ 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();

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

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

//์ •๋‹ต ํ™•์ธํ•˜๊ธฐ
const answerQuiz = () => {
    const quizSelects = document.querySelectorAll(".quiz__selects"); //๊ฐ๊ด€์‹๋ณด๊ธฐ


    //์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๋ณด๊ธฐ์™€ ๋ฌธ์ œ ์ •๋‹ต์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ธฐ (์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๋ณด๊ธฐ == ๋ฌธ์ œ ์ •๋‹ต)
    quizInfo.forEach((question, number) => {
        const userSelector = `input[name=select${number}]:checked`; //์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๊ฒƒ
        const quizSelectsWrap = quizSelects[number];                //๋ฌธ์ œ ๋ฒˆํ˜ธ  : number(index)๊ฐ€ 0์ผ ๋• ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ, 1์ด๋ฉด ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ quizSelectsWrap์œผ๋กœ ์„ค์ •ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
        const userAnswer = (quizSelectsWrap.querySelector(userSelector) || {}).value; //์ •๋‹ต ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ or์„ ์ด์šฉํ•ด ๋นˆ ๊ณต๋ฐฑ๋„ ๋‹ต์ฒ˜๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (์‚ฌ์šฉ์ž ์ฒดํฌ ์ฐพ๊ธฐ)
        const quizView = document.querySelectorAll(".quiz__view");  //๊ฐ•์•„์ง€

        if(userAnswer == question.answerResult){
            console.log("์ •๋‹ต")
            quizView[number].classList.add("like");
            quizScore++; //์ •๋‹ต์ด ๋งž์„ ๋•Œ ๋งˆ๋‹ค Score ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ธฐ
        } else {
            console.log("์˜ค๋‹ต")
            quizView[number].classList.add("dislike");
            const divBox = document.createElement("div");
            const divBox2 = document.createElement("div");
            quizSelectsWrap.appendChild(divBox).innerHTML = `

${question.answerEx}

` quizSelectsWrap.appendChild(divBox2).innerHTML = `

์ •๋‹ต์€ ${question.answerResult} ์ž…๋‹ˆ๋‹ค.

` } }); //์ „์ฒด ๋ฌธ์ œ์ˆ˜์™€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งžํžŒ ๊ฐฏ์ˆ˜ ํ™•์ธํ•˜๊ธฐ let scoreSet = Math.floor(quizScore * 100 / quizInfo.length); //Math.floor : ์†Œ์ˆซ์ ์„ ์—†์• ์ค€๋‹ค. | ๋งžํžŒ ๊ฐœ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ํ€ด์ฆˆ ์ด ๊ฐฏ์ˆ˜ x 100 if(quizScore >= 60){ //๋งžํžŒ ๊ฐœ์ˆ˜๊ฐ€ 60์  ์ด์ƒ์ธ ๊ฒฝ์šฐ ํ•ฉ๊ฒฉ ์•„๋‹Œ ๊ฒฝ์šฐ ๋ถˆํ•ฉ๊ฒฉ document.querySelector(".quiz__confirm .ex").innerHTML = `๋‹น์‹ ์€ ${quizInfo.length} ๋ฌธ์ œ ์ค‘ ${quizScore}์„ ๋งž์ถ”์…จ์Šต๋‹ˆ๋‹ค. ! ํ•ฉ๊ฒฉ !` } else { document.querySelector(".quiz__confirm .ex").innerHTML = `๋‹น์‹ ์€ ${quizInfo.length} ๋ฌธ์ œ ์ค‘ ${quizScore}์„ ๋งž์ถ”์…จ์Šต๋‹ˆ๋‹ค. ! ๋ถˆํ•ฉ๊ฒฉ !` } } document.querySelector(".quiz__confirm .check").addEventListener("click", answerQuiz); //์ •๋‹ต์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์•ค์จ ํ€ด์ฆˆ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ผ.
728x90

Lucky Charms Rainbow
js
html
css