๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript/Effect

ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ (5) ๊ฐ๊ด€์‹ ๋‹ค์ˆ˜ ๋ฌธํ•ญ

by oranssy 2022. 8. 16.
728x90
๋ฐ˜์‘ํ˜•

โญ๏ธ ๊ฐ๊ด€์‹ ๋‹ค์ˆ˜ ๋ฌธํ•ญ (์ •๋‹ต ์˜ค๋‹ต ํ™•์ธ) โญ๏ธ


01. ๋งŒ๋“œ๋Š” ์ˆœ์„œ

1) ์ถœ๋ ฅํ•  ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ์š”์†Œ ์„ ํƒํ•˜๊ธฐ
2) ์งˆ๋ฌธ๊ณผ ์ •๋‹ต ๋‚ด์šฉ, ํ•„์š”ํ•œ ๊ฐ’ ์ž…๋ ฅํ•˜๊ธฐ
3) ์งˆ๋ฌธ ๋‚ด์šฉ ์ถœ๋ ฅํ•˜๊ธฐ
4) ์ •๋‹ต ๋‚ด์šฉ ์ˆจ๊ฒจ๋†“๊ธฐ
5) ์ •๋‹ต ํ™•์ธ ๋ฐ ๊ฒฐ๊ณผ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ
6) ์ •๋‹ต ๋ฒ„ํŠผ์˜ ๋™์ž‘ ์„ค์ •ํ•˜๊ธฐ

02. < script > ์— ์ž‘์„ฑํ•˜๊ธฐ

    // ๋ฌธ์ œ ์ •๋ณด

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

        // ...(์ƒ๋žต)...์ด์–ด์„œ ๊ณ„์† ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.


    // ์„ ํƒ์ž
    const quizWrap = document.querySelector(".quiz__wrap");



    function 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();


     //์ •๋‹ต ํ™•์ธ
     function answerQuiz(){
        const quizSelects = document.querySelectorAll(".quiz__selects");    //๋ณด๊ธฐ
        const quizView = document.querySelectorAll(".quiz__view");          //๊ฐ•์•„์ง€
        //์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๋ผ๋””์˜ค ๋ฐ•์Šค  == ๋ฌธ์ œ ์ •๋‹ต
        quizInfo.forEach((question, number) => {
            const quizSelectsWrap = quizSelects[number];                    //์ „์ฒด ๋ณด๊ธฐ ๋ฐ•์Šค
            const userSelector = `input[name=select${number}]:checked`;         //์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆฐํ•œ ๋ผ๋””์˜ค ๋ฐ•์Šค
            const userAnswer = (quizSelectsWrap.querySelector(userSelector) || {}).value
            const quizView = document.querySelectorAll(".quiz__view");
            console.log(quizSelects)
            if(userAnswer == question.answerResult){
                console.log("์ •๋‹ต")
                quizView[number].classList.add("like");
            } else {
                console.log("์˜ค๋‹ต")
                quizView[number].classList.add("dislike");
                const div = document.createElement("div");
                quizSelectsWrap.appendChild(div).innerHTML = `<p class="result">${question.answerEx}</p>`;
            }
        });
    }
    document.querySelector(".quiz__confirm .check").addEventListener("click", answerQuiz);    // ๋งจ ๋ฐ‘์— ์žˆ์–ด์•ผ ํ•จ.

03. ๊ฒฐ๊ณผ๋ณด๊ธฐ

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€