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

[Quiz Effect] ํ€ด์ฆˆ ์ดํŽ™ํŠธ 05 - 2013๋…„ 4ํšŒ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ ๊ธฐ์ถœ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 8. 24.
๋ฐ˜์‘ํ˜•

ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ 05 : 2013๋…„ 4ํšŒ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ ๋™์•ˆ ๋ฐฐ์› ๋˜ JavaScript๋ฅผ ์ด์šฉํ•˜์—ฌ ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํ•™์Šต ๋‚ด์šฉ์„ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ ์‹œํ—˜ ๊ณต๋ถ€ ์—ด์‹ฌํžˆ ํ•ด ๋ด…์‹œ๋‹ค!
๋ณ€์ˆ˜(let)์™€ ์ƒ์ˆ˜(const)์— ์ฟผ๋ฆฌ ์…€๋ ‰ํ„ฐ ๊ฐ’์„ ์ €์žฅ์‹œํ‚ค๊ณ , ๊ทธ ๋™์•ˆ ๋ฐฐ์šด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ ์ •๋ณด๋ฅผ HTML ํƒœ๊ทธ์— ์ถœ๋ ฅ์‹œํ‚ค๊ณ , ์ •๋‹ต์„ ์ˆจ๊ฒผ๋‹ค๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋“ค์„ ๊ตฌํ˜„์‹œ์ผœ๋ด…์‹œ๋‹ค!


JS ์†Œ์Šค

๋‹ค์„ฏ๋ฒˆ์งธ ๊ฐ๊ด€์‹(์—ฌ๋Ÿฌ ๋ฌธ์ œ) ์œ ํ˜•์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์™€ ๋ถ€์—ฐ ์„ค๋ช…(์ฃผ์„ ์ฒ˜๋ฆฌ๋จ)์ด๋‹ค.
๊ธฐ์กด ๋ฌธ์ œ ํ’€์ด ๊ธฐ๋Šฅ์— ์ด ๋ฌธ์ œ์ˆ˜์™€ ์ •๋‹ต ๊ฐœ์ˆ˜, ์ด ์ ์ˆ˜, ํ•ฉ๊ฒฉ ์—ฌ๋ถ€ ๋“ฑ์„ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ž.
HTML๊ณผ CSS ์†Œ์Šค๋ฅผ ํ•จ๊ป˜ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋งจ ์•„๋ž˜์˜ '์›๋ณธ ์†Œ์Šค ๋ณด๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๊ฒƒ.

<script>
    //์„ ํƒ์ž
    //๋ฌธ์ œ ์ •๋ณด๋Š” ๊ธธ์–ด์„œ ์ƒ๋žต^^
    const quizInfo = [
            {
                answerType: "2013๋…„ 4ํšŒ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ - ๋””์ž์ธ์ผ๋ฐ˜",
                answerNum: "1",
                answerAsk: "์›น ๋””์ž์ธ์— ๊ด€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฒƒ์€?",
                answerChoice: {
                    1: "๊ฐ€. ์›น ํŽ˜์ด์ง€๋ฅผ ๋””์ž์ธํ•˜๊ณ  ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.",
                    2: "๋‚˜. ์›น ๋””์ž์ธ์€ ๊ฐœ์ธ์šฉ ํ™ˆํŽ˜์ด์ง€ ์™ธ ๊ธฐ์—…์šฉ, ์ƒ์—…์šฉ ๋“ฑ ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค.",
                    3: "๋‹ค. ์›น ๋””์ž์ธ์€ ์›น๊ณผ ๋””์ž์ธ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์ด ๊ฒฐํ•ฉ๋œ ๊ฒƒ์ด๋‹ค.",
                    4: "๋ผ. ๊ธฐ์—…, ๋‹จ์ฒด, ํ–‰์‚ฌ์˜ ํŠน์ง•๊ณผ ์„ฑ๊ฒฉ์— ๋งž๋Š” ์‹œ๊ฐ์  ์ƒ์ง•๋ฌผ์„ ๋งํ•œ๋‹ค.",
                }, 
                answerResult: "4",
                answerEx: "์ •๋‹ต : 4 
๊ธฐ์—…, ๋‹จ์ฒด, ํ–‰์‚ฌ์˜ ํŠน์ง•๊ณผ ์„ฑ๊ฒฉ์— ๋งž๋Š” ์‹œ๊ฐ์  ์ƒ์ง•๋ฌผ์€ ์บ๋ฆญํ„ฐ์— ๊ด€ํ•œ ์„ค๋ช…์ด๋‹ค." }, ... ]; const quizWrap = document.querySelector(".quiz__wrap"); let quizScore = 0; // ๋งž์€๊ฐœ์ˆ˜ let quizScore2 = 0; // ์ด์ ์ˆ˜ // ๋ฌธ์ œ ์ถœ๋ ฅ 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 class="resultInfo"> <div class="quizInfoNum">์ด ๋ฌธ์ œ์ˆ˜ : <p class="num">0</p></div> <div class="quizResultNum">์ •๋‹ต ๊ฐœ์ˆ˜ : <p class="num">0</p></div> <div class="quizScoreNum">์ด ์ ์ˆ˜ : <p class="num">0</p></div> <div class="passValue">ํ•ฉ๊ฒฉ ์—ฌ๋ถ€ : <p class="value"></p></div> </div> </div> `); quizWrap.innerHTML = exam.join(''); }; updateQuiz(); // ์ „์ฒด ๋ฌธ์ œ ์ˆ˜ // console.log(quizInfo.length); const quizInfoNum = document.querySelector(".quizInfoNum .num") quizInfoNum.textContent = quizInfo.length; // ๋งžํžŒ ์ˆ˜ // console.log(quizScore); const quizResultNum = document.querySelector(".quizResultNum .num") quizResultNum.textContent = quizScore; // ์ด ์ ์ˆ˜ const quizScoreNum = document.querySelector(".quizScoreNum .num"); // ํ•ฉ๊ฒฉ ๋ถˆํ•ฉ๊ฒฉ ์—ฌ๋ถ€ const passValue = document.querySelector(".passValue .value"); // ์ •๋‹ต ํ™•์ธ const answerQuiz = () => { const quizSelects = document.querySelectorAll(".quiz__selects"); // ๊ฐ๊ด€์‹ ๋ณด๊ธฐ // ์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ๋ณด๊ธฐ == ๋ฌธ์ œ์˜ ์ •๋‹ต 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"); // ๊ฐ•์•„์ง€ (60๋งˆ๋ฆฌ๋‚˜ ๋˜๋‹ˆ๊นŒ All ๋ถ™์ผ๊ฒƒ) if(userAnswer == question.answerResult) { // console.log("์ •๋‹ต"); quizView[number].classList.add("like"); //๊ฐ•์•„์ง€ ์›ƒ์Œ quizScore++; // ์ •๋‹ต์ด๋ฉด ๋งž์€ ๊ฐœ์ˆ˜์— 1์”ฉ ์ถ”๊ฐ€ quizScore2 += 1.6; // ์ •๋‹ต์ด๋ฉด ์ ์ˆ˜ 1.6์”ฉ ์ถ”๊ฐ€ } else { // console.log("์˜ค๋‹ต"); quizView[number].classList.add("dislike"); //๊ฐ•์•„์ง€ ์šธ์Œ const divBox = document.createElement("div"); quizSelectsWrap.appendChild(divBox).innerHTML = `

${question.answerEx}

`; } quizResultNum.textContent = quizScore; // ๋งž์€ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ quizScoreNum.textContent = quizScore2; // ์ด ์ ์ˆ˜ ์ถœ๋ ฅ // ํ•ฉ๊ฒฉ ๋ถˆํ•ฉ๊ฒฉ ์—ฌ๋ถ€ ์•Œ๋ฆผ if(quizScore >= 40) { passValue.textContent = "ํ•ฉ๊ฒฉ์ž…๋‹ˆ๋‹ค! ๐ŸŽ‰"; } else { passValue.textContent = "๋ถˆํ•ฉ๊ฒฉ์ž…๋‹ˆ๋‹คโ€ฆ ๐Ÿ˜ฐ"; } }); }; // ์ •๋‹ต ํ™•์ธ ํด๋ฆญ document.querySelector(".quiz__confirm .check").addEventListener("click", answerQuiz); </script>

HTML ์˜์—ญ์— ์ ํ˜€์žˆ์–ด์•ผ ํ•  ๊ฒƒ๋“ค์€ quizInfo.forEach((question, number) => ) { exam.push(``)... }์•ˆ์— ๋„ฃ๋Š”๋‹ค.

๊ฒฐ๊ณผ

2013๋…„ 4ํšŒ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ ๊ธฐ์ถœ๋ฌธ์ œ๋“ค์„ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์„œ ์šฐ๋ฆฌ ๋ชจ๋‘ ๋ฌด์‚ฌํžˆ ํ•ฉ๊ฒฉํ•ฉ์‹œ๋‹ค~! ๐Ÿฅฐ
'์›๋ณธ ์‚ฌ์ดํŠธ ๋ณด๊ธฐ'๋ฅผ ๋ˆŒ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์„ธ์š”.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.