ํด์ฆ ๊ฐ๊ด์ ์ ํ : 60๋ฌธ์
์ด๋ฒ ์๊ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ฌธ์ ํ
์คํธ๋ค์ ์ง์ ํด๋น ๋์ ๋ฃ์ด์ ์ ์ํด๋ด
์๋ค!
๊ทธ ๋ค ์กฐ๊ฑด๋ฌธ์ ํตํด ์ ๋ต ๊ฐฏ์์ ๋ฌธ์ ์ ์ด ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ์์ ๋ง๋ค์ด ๋ด
์๋ค.
! ๋ฏธ๋ฆฌ ๋ณด๊ธฐ !
#1. ํด์ฆ ์ธํฌ (๋ฌธ์ ๋ชจ์) ๋ง๋ค๊ธฐ
๋ฐ์ดํฐ ์ ์ฅ ํ์ ์ธ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ๊ฐ์ ํด์ฆ ๋ฌธ์ ๋ฅผ ํค์ ๊ฐ์ผ๋ก ๋ฐ์ดํฐํ ์์ผ ์ ์ฅํด์ค๋๋ค.
const quizInfo = [
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2015๋
01ํ",
answerNum : "1",
answerAsk : "์น ๋์์ธ์ ๋ํ ์ค๋ช
์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ๊ฒ์?",
answerChoice : {
1: "์น ํ์ด์ง๋ฅผ ๋์์ธํ๊ณ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.",
2: "์น ๋์์ธ์ ๊ฐ์ธ์ฉ ํํ์ด์ง ์ด์ธ์ ๊ธฐ์
์ฉ ๋ฑ ๋ค์ํ๋ค.",
3: "์น ๋์์ธ์ Web๊ณผ Design์ด๋ผ๋ ๋ ๊ฐ์ง ๊ฐ๋
์ด ๊ฒฐํฉ๋ ๊ฒ์ด๋ค.",
4: "๊ธฐ์
, ๋จ์ฒด, ํ์ฌ์ ํน์ง๊ณผ ์ฑ๊ฒฉ์ ๋ง๋ ์๊ฐ์ ์์ง๋ฌผ์ ๋งํ๋ค.",
},
answerResult : "4",
answerEx : "๊ธฐ์
์ ์์งํ๋ ๊ฒ์ CI์ด๋ค.",
},
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2015๋
01ํ",
answerNum : "2",
answerAsk : "๋์์ธ์ ์ฌ๋ฏธ์ฑ์ ๋ํ ์ค๋ช
์ผ๋ก ๋ง๋ ๊ฒ์?",
answerChoice : {
1: "์๋ฆ๋ค์์ ๋๋ผ๋ ๋ฏธ์ ์์์ด๋ฉฐ ์ฃผ๊ด์ ์ผ ์ ์๋ค.",
2: "๊ฐ์ฑ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ชจ๋ ์ฌ๋์๊ฒ ๋์ผํ๊ฒ ๋ํ๋๋ค.",
3: "ํฉ๋ฆฌ์ ์ด๋ฉฐ ๊ฐ๊ด์ ์ธ ๋ฏธ์ ํ๋์ด๋ค.",
4: "๊ตญ๊ฐ, ๋ฏผ์กฑ, ๊ด์ต, ์๋์ ๊ด๊ณ์์ด ๋์ผํ๊ฒ ๋ํ๋๋ค.",
},
answerResult : "1",
answerEx : "์ฌ๋ฏธ์ฑ : ํํ์ ์์ฑ์กฐํ๋ฅผ ์ด๋ฃจ์ด '์๋ฆ๋ค์'์์ฑ์ง์ ๋ง๋ค์ด๋ด๋ ๊ฒ ๋์คํ์ ์กฐํ์ฑ์ด๋ผ๊ณ ๋ ๋งํ๋ฉฐ, ์๋์ ์ธ ๋ฏธ์ ๊ธฐ์ค, ์ฌํ์ ์ธ ๊ฐ์ฑ์ ๋ฐ๋ผ ๋ณํ๋๋ค.",
},
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2015๋
01ํ",
answerNum : "3",
answerAsk : "๋์ ๋๋น์ ํด๋นํ์ง ์๋ ๊ฒ์?",
answerChoice : {
1: "์์ ๋๋น",
2: "๋ช
๋ ๋๋น",
3: "๋ณด์ ๋๋น",
4: "ํ๋ ๋๋น",
},
answerResult : "4",
answerEx : "์๋ก ๊ฐ๊น์ด ๋์ฌ์ง ๋๊ฐ ์ด์์ ์์ ๋์์ ๋ณผ ๋ ์ผ์ด๋๋ ์์ฑ๋๋น๋ฅผ ๋งํ๋ค. ๋์๋๋น๋ ์์ฑ์ 3์์ฑ๋ค์ ์ฐจ์ด์ ๋ฐ๋ฅธ ์ง๊ฐ๋ณํ์ ๋ฐ๋ผ์ ๋ช
๋๋๋น, ์์๋๋น, ์ฑ๋๋๋น, ๋ณด์๋๋น๋ก ๊ตฌ๋ถ๋๋ค. ์ฌ๋ฆฌ์ ๊ดํ ์์ฉ์ด. ์๋ก ๋ฐ๋๋๊ฑฐ๋ ๋๋จํ ํ๋ฆฌ๋ ๊ฐ๊ฐ, ๊ฐ์ ๋ฑ์ด ๋์์ ๋น๊ตํ๋ฉด, ๊ทธ ํ์ชฝ ๋๋ ์์ชฝ์ ํน์ฑ์ด ํ์ธต ๋ช
๋ฐฑํด ์ง๋ ์ผ. ์๋ฅผ๋ค๋ฉด, ๋๊ฐ์ ํ์์ ์(ๅ)์ ํฐ์ข
์ด์ ๊ฒ์ ์ข
์ด ์์ ๋๊ณ ๋ณผ ๋ ๊ฒ์์ข
์ด ์์์๋ ํฌ๊ฒ ๋ณด์ด๊ณ , ํฐ์ข
์ด ์์์๋ ๊ฒ๊ฒ ๋ณด์ด๋ ๊ฒ ๋ฑ์ด ๋์์ ๋๋น์ด๋ค.",
}, .........
//์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก 60๋ฌธ์ ๋ฅผ ์ญ ๋์ดํด์ค๋๋ค.
#2. push()์ join()์ ํตํด ํด์ฆ ๋ฌธ์์ด ๋ฃ๊ธฐ
๋ฐ์ดํฐ๋ฅผ ์คํํด ์ค ํจ์๋ฅผ ๋ง๋ ๋ค push()์ ๋ฌธ์์ด์ ์์ฑ ํ ``(๋ฐฑํฑ), ${} ๊ทธ๋ฆฌ๊ณ join('')์ ์ด์ฉํ์ฌ ๋ฐฐ์ด ์์ ๋ฌธ์์ด์ ๋ฃ์ด ์ค์๋ค!
์ด ๋ push๋ก ๊ฐ์ ธ ์ฌ ๊ฒ์ html๋ก ์์ฑํ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ html๋ก ์์
ํ๋ ์ฝ๋๋ค์ ์ฃผ์์ฒ๋ฆฌ ํ๊ฑฐ๋ ์ญ์ ํด์ค๋๋ค!
const updateQuiz = () => {
const exam = []; //๋ฌธ์์ด์ ๋ฃ์ ๋ฐฐ์ด์ 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();
#3. ํจ์ ์์ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ์์ฑํ์ฌ ์ ๋ต ํ์ธํ๊ธฐ
+ ๋ฌธ์ ๊ฐฏ์์ ๋งํ ๊ฐฏ์ ํ์ธํ๊ธฐ
์ต๋ช ํ์ดํ ํจ์์ forEach๋ฌธ, if๋ฌธ์ ํตํด ์ฌ์ฉ์๊ฐ ์ฒดํฌํ ๊ฐ๊ณผ ์ ๋ต ๊ฐ์ ๋น๊ตํ๊ณ ์ฒ๋ฆฌํ๋ ์์ ๋ง๋ค์ด๋ด ์๋ค.
//์ ๋ต ํ์ธํ๊ธฐ
const answerQuiz = () => {
const quizSelects = document.querySelectorAll(".quiz__selects"); //๊ฐ๊ด์๋ณด๊ธฐ
//์ฌ์ฉ์๊ฐ ์ฒดํฌํ ๋ณด๊ธฐ์ ๋ฌธ์ ์ ๋ต์ด ๊ฐ์์ง ํ์ธํ๊ธฐ (์ฌ์ฉ์๊ฐ ์ฒดํฌํ ๋ณด๊ธฐ == ๋ฌธ์ ์ ๋ต)
quizInfo.forEach((question, number) => {
const userSelector = `input[name=select${number}]:checked`; //์ฌ์ฉ์๊ฐ ์ฒดํฌํ ๊ฒ
const quizSelectsWrap = quizSelects[number]; //๋ฌธ์ ๋ฒํธ : number(index)๊ฐ 0์ผ ๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์ , 1์ด๋ฉด ๋ ๋ฒ์งธ ๋ฌธ์ ๋ผ๋ ๊ฒ์ quizSelectsWrap์ผ๋ก ์ค์ ํ ๊ฒ ์
๋๋ค.
const userAnswer = (quizSelectsWrap.querySelector(userSelector) || {}).value; //์ ๋ต ์ฒดํฌ๋ฅผ ํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ฌ or์ ์ด์ฉํด ๋น ๊ณต๋ฐฑ๋ ๋ต์ฒ๋ฆฌ๊ฐ ๋ ์ ์๋๋ก ํ๋ค. (์ฌ์ฉ์ ์ฒดํฌ ์ฐพ๊ธฐ)
const quizView = document.querySelectorAll(".quiz__view"); //๊ฐ์์ง
if(userAnswer == question.answerResult){
console.log("์ ๋ต")
quizView[number].classList.add("like");
quizScore++; //์ ๋ต์ด ๋ง์ ๋ ๋ง๋ค Score ํ๋์ฉ ์ฌ๋ฆฌ๊ธฐ
} else {
console.log("์ค๋ต")
quizView[number].classList.add("dislike");
const divBox = document.createElement("div");
const divBox2 = document.createElement("div");
quizSelectsWrap.appendChild(divBox).innerHTML = `${question.answerEx}
`
quizSelectsWrap.appendChild(divBox2).innerHTML = `์ ๋ต์ ${question.answerResult} ์
๋๋ค.
`
}
});
//์ ์ฒด ๋ฌธ์ ์์ ์ฌ์ฉ์๊ฐ ๋งํ ๊ฐฏ์ ํ์ธํ๊ธฐ
let scoreSet = Math.floor(quizScore * 100 / quizInfo.length); //Math.floor : ์์ซ์ ์ ์์ ์ค๋ค. | ๋งํ ๊ฐ์ ๋๋๊ธฐ ํด์ฆ ์ด ๊ฐฏ์ x 100
if(quizScore >= 60){ //๋งํ ๊ฐ์๊ฐ 60์ ์ด์์ธ ๊ฒฝ์ฐ ํฉ๊ฒฉ ์๋ ๊ฒฝ์ฐ ๋ถํฉ๊ฒฉ
document.querySelector(".quiz__confirm .ex").innerHTML = `๋น์ ์ ${quizInfo.length} ๋ฌธ์ ์ค ${quizScore}์ ๋ง์ถ์
จ์ต๋๋ค. ! ํฉ๊ฒฉ !`
} else {
document.querySelector(".quiz__confirm .ex").innerHTML = `๋น์ ์ ${quizInfo.length} ๋ฌธ์ ์ค ${quizScore}์ ๋ง์ถ์
จ์ต๋๋ค. ! ๋ถํฉ๊ฒฉ !`
}
}
document.querySelector(".quiz__confirm .check").addEventListener("click", answerQuiz); //์ ๋ต์ ํด๋ฆญํ์ ๋ ์ค์จ ํด์ฆ๋ฅผ ์คํ์์ผ๋ผ.
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[EFFECT] ์ด๋ฏธ์ง : ์ฌ๋ผ์ด๋ ์ ํ01 (2) | 2022.08.30 |
---|---|
[QUIZ] ํด์ฆ ๋ง๋ค๊ธฐ06 : ์ฌ๋ผ์ด๋ ํ์ (3) | 2022.08.25 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ03 (4) | 2022.08.23 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ02 (4) | 2022.08.17 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ01 (5) | 2022.08.17 |
๋๊ธ