ํด์ฆ ๋ง๋ค๊ธฐ 06 : ๊ฐ๊ด์(์ฌ๋ฌ ๋ฌธ์ ) ์ ํ : ์ฌ๋ผ์ด๋
์ด๋ฒ ์๊ฐ์๋ ๊ทธ ๋์ ๋ฐฐ์ ๋ JavaScript๋ฅผ ์ด์ฉํ์ฌ ํด์ฆ๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฒ ํ์ต ๋ด์ฉ์ ์ ํ์ฉํ์ฌ ์น๋์์ธ๊ธฐ๋ฅ์ฌ ์ํ ๊ณต๋ถ ์ด์ฌํ ํด ๋ด
์๋ค!
๋ณ์(let)์ ์์(const)์ ์ฟผ๋ฆฌ ์
๋ ํฐ ๊ฐ์ ์ ์ฅ์ํค๊ณ , ๊ทธ ๋์ ๋ฐฐ์ด ์คํฌ๋ฆฝํธ๋ฅผ
ํตํด ๋ฌธ์ ์ ๋ณด๋ฅผ HTML ํ๊ทธ์ ์ถ๋ ฅ์ํค๊ณ , ์ ๋ต์ ์จ๊ฒผ๋ค๊ฐ ๋ฒํผ์ ๋๋ฌ ๋ณด์ด๊ฒ ํ๋
๋ฑ์ ๋ค์ํ ํจ๊ณผ๋ค์ ๊ตฌํ์์ผ๋ด
์๋ค!
๋ฌธ์ ์ ๋ณดยท์ ํ์ ์์ฑ
๋ฌธ์ ์ ๋ณด๋ฅผ ๋ฐฐ์ด ์์ ๊ฐ์ฒด ํํ๋ก ์์ฑํด์ค๋ค. ๋ค๋ฅธ ํด์ฆ ํจ๊ณผ์๋ ๋ฌ๋ฆฌ answerResult์ ๋ฒํธ๊ฐ ์๋ answerChoice์ ์๋ ์ ๋ต ๊ทธ ์์ฒด๋ฅผ ๊ทธ๋๋ก ๋๊ฐ์ด ์ ๋ ฅํด์ค๋ค. ํ์ํ const ์์๋ฅผ ์์ฑํด์ค ๋ค์ ์ฐ๊ฒฐํด์ฃผ๋ ์์ ๊น์ง ๋ง์น๋ฉด ๋ง์ง๋ง์ผ๋ก๋ let ๋ณ์์ ๋ฌธ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํ ๋ณ์์ ๋ง์ถ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํ ๋ณ์๋ฅผ ์์ฑํ์.
// ๋ฌธ์ ์ ๋ณด
const quizInfo = [
{
answerType: "2013๋
4ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ - ๋์์ธ์ผ๋ฐ",
answerNum: "1",
answerAsk: "์น ๋์์ธ์ ๊ดํ ์ค๋ช
์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ๊ฒ์?",
answerChoice: [
"๊ฐ. ์น ํ์ด์ง๋ฅผ ๋์์ธํ๊ณ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.",
"๋. ์น ๋์์ธ์ ๊ฐ์ธ์ฉ ํํ์ด์ง ์ธ ๊ธฐ์
์ฉ, ์์
์ฉ ๋ฑ ๋งค์ฐ ๋ค์ํ๋ค.",
"๋ค. ์น ๋์์ธ์ ์น๊ณผ ๋์์ธ์ด๋ผ๋ ๋ ๊ฐ์ง ๊ฐ๋
์ด ๊ฒฐํฉ๋ ๊ฒ์ด๋ค.",
"๋ผ. ๊ธฐ์
, ๋จ์ฒด, ํ์ฌ์ ํน์ง๊ณผ ์ฑ๊ฒฉ์ ๋ง๋ ์๊ฐ์ ์์ง๋ฌผ์ ๋งํ๋ค.",
],
answerResult: "๋ผ. ๊ธฐ์
, ๋จ์ฒด, ํ์ฌ์ ํน์ง๊ณผ ์ฑ๊ฒฉ์ ๋ง๋ ์๊ฐ์ ์์ง๋ฌผ์ ๋งํ๋ค.",
answerEx: "์ ๋ต : 4
๊ธฐ์
, ๋จ์ฒด, ํ์ฌ์ ํน์ง๊ณผ ์ฑ๊ฒฉ์ ๋ง๋ ์๊ฐ์ ์์ง๋ฌผ์ ์บ๋ฆญํฐ์ ๊ดํ ์ค๋ช
์ด๋ค."
},
{
answerType: "2013๋
4ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ - ๋์์ธ์ผ๋ฐ",
answerNum: "2",
answerAsk: "๋ค์ ์ค ์๊ฐ ๋์์ธ์ ์ํ์ง ์๋ ๊ฒ์?",
answerChoice: [
"๊ฐ. ํ
์คํ์ผ ๋์์ธ",
"๋. ํจํค์ง ๋์์ธ",
"๋ค. POP ๋์์ธ",
"๋ผ. ํ์ดํฌ๊ทธ๋ํผ",
],
answerResult: "๊ฐ. ํ
์คํ์ผ ๋์์ธ",
answerEx: "์ ๋ต : 1
ํ
์คํ์ผ ๋์์ธ์ ์ง๊ฐ์ ํฌ์ธํธ๋ก ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋์์ธ์ด๋ผ ๋ณด๊ธฐ ํ๋ค๋ค."
},
{
answerType: "2013๋
4ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ - ๋์์ธ์ผ๋ฐ",
answerNum: "3",
answerAsk: "ํ๊ฒฝ ๋์์ธ์ ์ํ์ง ์๋ ๊ฒ์?",
answerChoice: [
"๊ฐ. ์ธํ
๋ฆฌ์ด ๋์์ธ",
"๋. ๋ฌด๋ ๋์์ธ",
"๋ค. ๊ฐ๊ตฌ ๋์์ธ",
"๋ผ. ์กฐ๊ฒฝ ๋์์ธ",
],
answerResult: "๋ค. ๊ฐ๊ตฌ ๋์์ธ",
answerEx: "์ ๋ต : 3
์ธํ
๋ฆฌ์ด, ๋ฌด๋, ์กฐ๊ฒฝ ๋์์ธ์ ํ๊ฒฝ ๋์์ธ์ด์ง๋ง ๊ฐ๊ตฌ ๋์์ธ์ ํ๊ฒฝ๋ณด๋ค๋ ์ธํ
๋ฆฌ์ด์๋ง ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ ๋์์ธ์ด๋ผ ๋ณด๊ธฐ ํ๋ค๋ค."
},
{
answerType: "2013๋
4ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ - ๋์์ธ์ผ๋ฐ",
answerNum: "4",
answerAsk: "์์ฑ์ ๋ํ ์ค๋ช
์ผ๋ก ๋ง๋ ๊ฒ์?",
answerChoice: [
"๊ฐ. ์์ฑ๋ ์ฌ๋ฆฌ์ ์ฑ์ง์ ๊ฐ์ง ๋ชปํ๋ค.",
"๋. ๋ฌผ์ฒด๊ฐ ๋ฐ๊ดํ์ง ์๊ณ ๋น์ ๋ฐ์์ ํก์๋๋ ์์ด๋ค.",
"๋ค. ์์ฑ์ ๋ถ๋ฅ๋ ๋ฌด์ฑ์, ์ ์ฑ์ ์ค์ฑ์ 3๊ฐ์ง๋ ์๋ค.",
"๋ผ. ์์ฑ๋ฅผ ๋๋ผ๋ ๊ฒฝ์ฐ ์ ์ฑ์, ๋๋ ์ ์๋ ๊ฒฝ์ฐ ๋ฌด์ฑ์์ด๋ผ ํ๋ค.",
],
answerResult: "๋ผ. ์์ฑ๋ฅผ ๋๋ผ๋ ๊ฒฝ์ฐ ์ ์ฑ์, ๋๋ ์ ์๋ ๊ฒฝ์ฐ ๋ฌด์ฑ์์ด๋ผ ํ๋ค.",
answerEx: "์ ๋ต : 4
์์ฑ๋ฅผ ๋๋ผ๋ ๊ฒฝ์ฐ ์ ์ฑ์, ๋๋ ์ ์๋ ๊ฒฝ์ฐ ๋ฌด์ฑ์์ด๋ผ ํ๋ค."
},
{
answerType: "2013๋
4ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ - ๋์์ธ์ผ๋ฐ",
answerNum: "5",
answerAsk: "๋ค์ ์ค โํฉ๋ชฉ์ ์ฑโ๊ณผ โ์ฌ๋ฏธ์ฑโ ์์๋ ์กด์ฌํ๋ ์ฐฝ์์ ๋์์ธ ์กฐ๊ฑด์?",
answerChoice: [
"๊ฐ. ๋
์ฐฝ์ฑ",
"๋. ์ง์์ฑ",
"๋ค. ๊ฒฝ์ ์ฑ",
"๋ผ. ์ต์์ฑ",
],
answerResult: "๊ฐ. ๋
์ฐฝ์ฑ",
answerEx: "์ ๋ต : 1
์ฐฝ์์ ๋์์ธ ์กฐ๊ฑด์ ๋
์ฐฝ์ฑ์ด๋ค."
},
];
const quizType = document.querySelector(".quiz__type"); // ๋ฌธ์ ์ ํ
const quizQuestion = document.querySelector(".quiz__question"); // ๋ฌธ์ ๋ฒํธ, ์ง๋ฌธ
const quizSelects = document.querySelector(".quiz__selects"); // ๊ฐ๊ด์ ๋ณด๊ธฐ
const quizResult = document.querySelector(".quiz__answer .result"); // ๋ฌธ์ ํด์ค
const quizConfirm = document.querySelector(".quiz__answer .confirm"); // ์ ๋ต ํ์ธ ๋ฒํผ
const quizView = document.querySelector(".quiz__view"); // ๊ฐ์์ง
let quizCount = 0; // ๋ฌธ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํ ๋ณ์ ์์ฑ
let quizScore = 0; // ๋ง์ถ ๋ฌธ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํ ๋ณ์ ์์ฑ
๋ฌธ์ ์ถ๋ ฅ
HTML ์์ ์ค ๋ณ๊ฒฝ๋ ์ฌํญ๋ง์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๋๋ก ํ์.
๊ทธ๋ฐ ๋ค์, ๋ฌธ์ ๋ฅผ ์ถ๋ ฅ์์ผ์ฃผ๊ณ ์ ๋ต ํ์ธ ๋ฒํผ๊ณผ ํด์ค์ ์ ์ ์จ๊ฒจ์ฃผ๋๋ก ํ๋ค.
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; // ๋ฒํธ, ์ง๋ฌธ
quizSelects.innerHTML = choiceTag; // ๊ฐ๊ด์ ๋ณด๊ธฐ
quizResult.innerHTML = quizInfo[index].answerEx; // ํด์ค
const quizChoice = quizSelects.querySelectorAll(".choice"); // ๋ณด๊ธฐ ์ ํํ๋ ์ ํ์ ์์ฑ
for(let i = 0; i < quizChoice.length; i++) {
quizChoice[i].setAttribute("onclick", "choiceSelected(this)"); // ํด๋ฆญํ๊ฐ ์ ์ฅ
}
// ๋ฌธ์ , ํด์ค ์จ๊ธฐ๊ธฐ
quizResult.style.display ="none";
quizConfirm.style.display ="none";
}
updateQuiz(quizCount);
์ ๋ต ํ์ธยท์ ๋ต ํ์ธ ๋ฒํผยท๋ง์ง๋ง ๋ฌธ์
์ฌ์ฉ์๊ฐ ์ฒดํฌํ ์ ๋ต๊ณผ ์ง์ง ๋ฌธ์ ์ ์ ๋ต ๋ณ์๋ฅผ ์์ฑํ๊ณ if(else)๋ฌธ์ ํตํด ์ ๋ต์ผ ๊ฒฝ์ฐ์๋ ๊ฐ์์ง๋ฅผ ๋ฏธ์์ง๊ฒ, ์ค๋ต์ผ ๊ฒฝ์ฐ ๊ฐ์์ง๋ฅผ ์ฌํ๊ฒ ๋ง๋ค์. ๊ทธ๋ฐ ๋ค์ ์ ๋ต ํ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ค์ ๋ฌธ์ ๋ก ๋์ด๊ฐ ์ ์๋๋ก ์ค์ ํ๊ณ , ๋ง์ง๋ง ๋ฌธ์ ์์๋ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด '์ด $๋ฌธ์ ์ค์ $ ๋ฌธ์ ๋ฅผ ๋ง์ถค'์ด๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅ์ํค๋๋ก ํ๋ค.
const choiceSelected = (answer) => {
let userAnswer = answer.textContent; // ์ฌ์ฉ์๊ฐ ์ฒดํฌํ ์ ๋ต
let currentAnswer = quizInfo[quizCount].answerResult; // ๋ฌธ์ ์ ๋ต
// ์ฌ์ฉ์ ์ฒดํฌํ ๋ต๊ณผ ์ง์ง ๋ฌธ์ ์ ๋ต์ด ๊ฐ๋ค๋ฉด...
if(userAnswer == currentAnswer) {
console.log("์ ๋ต");
quizView.classList.add("like");
quizScore++; // ์ ๋ต ๊ฐ์ ํ์ธ ํ ๋ณ์์ 1์ฉ ๋ํด์ค
} else {
console.log("์ค๋ต");
quizView.classList.add("dislike");
quizResult.style.display = "block"; // ํด์ค ๋ณด์ด๊ฒ ํจ
}
quizConfirm.style.display = "block"; // ๋ค์๋ฌธ์ ๋ฒํผ ๋ณด์ด๊ฒ ํจ
}
// ์ ๋ต ํ์ธ ๋ฒํผ
const answerQuiz = () => {
// ๋ง์ง๋ง ๋ฌธ์
if(quizInfo.length -1 == quizCount) {
quizConfirm.textContent = `์ด ${quizInfo.length} ๋ฌธ์ ์ค์ ${quizScore} ๋ฌธ์ ๋ฅผ ๋ง์ถค`;
}
quizCount++; // ๋ฌธ์ ๋ฅผ ๋ค ํ๋ฉด ๋ค์ ๋ฌธ์ ๋ก ๋์ด๊ฐ ์ ์๋๋ก ๋ฌธ์ ๋ฒํธ ๋ํด์ค
updateQuiz(quizCount);
quizView.classList.remove("like", "dislike"); //๋ค์๋ฌธ์ ๊ฐ์ ๋ ๊ฐ์์ง ํ์ ๋ฆฌ์
}
quizConfirm.addEventListener("click", answerQuiz);
๋๊ธ