๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
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
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€