ํด์ฆ ๋ง๋ค๊ธฐ 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ํ ์น๋์์ธ๊ธฐ๋ฅ์ฌ ๊ธฐ์ถ๋ฌธ์ ๋ค์ ํ ์ ์๋๋ก ํ์ต๋๋ค. ์ด์ฌํ ๊ณต๋ถํด์ ์ฐ๋ฆฌ ๋ชจ๋ ๋ฌด์ฌํ ํฉ๊ฒฉํฉ์๋ค~! ๐ฅฐ
'์๋ณธ ์ฌ์ดํธ ๋ณด๊ธฐ'๋ฅผ ๋๋ฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์ธ์.
'Effect > Quiz Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Quiz Effect] ํด์ฆ ์ดํํธ 06 - ์ฌ๋ผ์ด๋ ํ์ (6) | 2022.08.24 |
---|---|
[Quiz Effect] ํด์ฆ ์ดํํธ 04 - ๊ฐ๊ด์(ํ ๋ฌธ์ ) ์ ํ (9) | 2022.08.08 |
[Quiz Effect] ํด์ฆ ์ดํํธ 03 - ์ฃผ๊ด์(์ฌ๋ฌ ๋ฌธ์ ) ์ ํ (8) | 2022.08.05 |
[Quiz Effect] ํด์ฆ ์ดํํธ 02 - ์ฃผ๊ด์ ์ ํ (9) | 2022.08.04 |
[Quiz Effect] ํด์ฆ ์ดํํธ 01 - ์ ๋ต ํ์ธํ๊ธฐ ์ ํ (12) | 2022.08.04 |
๋๊ธ