ํด์ฆ ์ฃผ๊ด์(์ฌ๋ฌ๋ฌธ์ ) ์ ํ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์น๋์์ธ๊ธฐ๋ฅ์ฌ ํ๊ธฐ๋ฌธ์ ๋ฅผ ์ฃผ๊ด์ ์ ํ ํด์ฆ๋ก ์ฌ๋ฌ๊ฐ ์ ์ํด๋ณด๊ธฐ
4๊ฐ์ ์ฃผ๊ด์ ํด์ฆ๋ฅผ ํ๋ ์ถ๋ ฅ, ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ์ด์ฉํ ์ถ๋ ฅ์ผ๋ก ๋๋์ด ์ดํด๋ณด์!
#1. ์ ํ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค
์์์๊ฒ ํด๋น๋ช
์นญ(ex: quizType)์ ์ ์ธํด์ฃผ๊ณ ์ฟผ๋ฆฌ์
๋ํฐ(ํ๊ทธ, ์์ด๋, ํด๋์ค๋ฅผ ์ ํํ ์ ์๋ ๊ฒ)๋ก ์ ํํ ์์๋ฅผ ์ฐพ์์ ๋ฃ์ด๋ณด์!
//์ ํ์
const quizType = document.querySelectorAll(".quiz__type"); //ํด์ฆ์ข
๋ฅ
const quizNumber = document.querySelectorAll(".quiz__question .number"); //ํด์ฆ ๋ฒํธ
const quizAsk = document.querySelectorAll(".quiz__question .ask"); //ํด์ฆ ์ง๋ฌธ
const quizConfirm = document.querySelectorAll(".quiz__answer .confirm"); //์ ๋ต ํ์ธ ๋ฒํผ
const quizResult = document.querySelectorAll(".quiz__answer .result"); //์ ๋ต ๊ฒฐ๊ณผ
const quizInput = document.querySelectorAll(".quiz__answer .input"); //์ฌ์ฉ์ ์ ๋ต ์์ฑ๋
const quizView = document.querySelectorAll(".quiz__view"); //๊ฐ์์ง
=> ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ 02๋ฒ์์๋ ๋ฌธ์ ๊ฐ ํ๋์๊ธฐ ๋๋ฌธ์ querySelector๋ง ์ฌ์ฉํด์ฃผ์์ง๋ง ์ด๋ฒ ์คํฌ๋ฆฝํธ๋ ํด์ฆ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฏ๋ก querySelector ๋ค์ All์ ๋ถ์ฌ์ ๋ชจ๋ ์ ํ์๋ฅผ ๋ถ๋ฌ์ค๋๋ก ํ๋ค.
<๊ฒฐ๊ณผ ๋ณด๊ธฐ>
#2. ๋ฌธ์ ์ ๋ณด ์๋ฐ์คํฌ๋ฆฝํธ ์์ค
๋ฐฐ์ด ์ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ํค์ ๊ฐ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๋ฌธ์ ์ ๋ณด(๋ฐ์ดํฐ)๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅ์ํจ๋ค.
//๋ฌธ์ ์ ๋ณด
const quizInfo = [
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2016๋
01์24์ผ",
answerNum : "1",
answerAsk : "ํ๊ตญ์ฐ์
ํ์ค(KS)์ ๋ฐ๋ฅธ ์์ 3์์ฑ์ ๋ฌด์์ธ๊ฐ?",
answerResult : "Hue(์์),Value(๋ช
๋),Chroma(์ฑ๋)"
}, //0(index)
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2016๋
01์24์ผ",
answerNum : "2",
answerAsk : "๋ฏธ์ ๋์์ ๊ตฌ์ํ๋ ๋ถ๋ถ๊ณผ ๋ถ๋ถ์ ์ฌ์ด์ ์ง์ ์ผ๋ก๋ ์์ ์ผ๋ก ๋ชจ์๋๋ ์ผ ์์ด ์ง์๊ฐ ์กํ ์ด์ธ๋ฆฌ๋ ๊ฒ์ ๋ฌด์์ธ๊ฐ?",
answerResult : "์กฐํ"
},//1
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2016๋
01์24์ผ",
answerNum : "3",
answerAsk : "๊ฐ์ ํฌ๊ธฐ์ ํ์ ์, ํ๋ก ๊ฒน์น ๋ ์์ชฝ์ ๊ฒ์ด ํฌ๊ฒ ๋ณด์ด๋ ์ฐฉ์ํ์์ ๋ฌด์์ธ๊ฐ?",
answerResult : "์๋ฐฉ ๊ฑฐ๋ฆฌ์ ๊ณผ๋์ฐฉ์"
},//2
{
answerType : "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2016๋
01์24์ผ",
answerNum : "4",
answerAsk : "์๊ด์ ํผํฉ์์ ์์ ํผํฉํ๋ฉด ํ ์๋ก ๋์์ง๋ ์์ ์์ฑ์ ๋ฌด์์ธ๊ฐ?",
answerResult : "๋ช
๋"
}//3
//arr์ ๋ฐฐ์ด์ ์ถ๋ ฅํ์ง๋ง ํ์ฌ ๋ฐฐ์ด์ '๊ฐ์ฒด'๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ํค ๊ฐ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ํํ์ฌ ์ถ๋ ฅํด์ฃผ์ด์ผ ํ๋ค.
//์ฃผ์ : ํค๋ฅผ ์ ํํ์ง ์์ ์ฑ๋ก ์ถ๋ ฅํ๊ฒ ๋๋ฉด ๋ฌด์์ ์ถ๋ ฅํ๋ผ๋ ๊ฑด์ง ์ธ์ํ์ง ๋ชปํ์ฌ object๋ก ๊ฐ์ด ์ถ๋ ฅ๋๋ ์ค๋ฅ๊ฐ ๋๋ค.
]
#3. ๋ฌธ์ ์ถ๋ ฅํ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค
ํ๋ ์ถ๋ ฅ ๋ฐฉ๋ฒ๊ณผ for๋ฌธ์ ์ด์ฉํ ์ถ๋ ฅ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ forEach๋ฌธ์ ์ฌ์ฉํ ์ถ๋ ฅ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๊ทธ๋ฆฌ๊ณ ์ค์ ์น์์ ๋ฐ๋ณต๋ฌธ์ด ์ด๋ป๊ฒ ํ์ฉ๋๊ณ ์์ฉ๋๋์ง ์ดํด๋ณด์.
// ํ๋ ์ถ๋ ฅ
quizType[0].textContent = quizInfo[0].answerType;
quizType[1].textContent = quizInfo[1].answerType;
quizType[2].textContent = quizInfo[2].answerType;
quizType[3].textContent = quizInfo[3].answerType;
// quizType
quizNumber[0].textContent = quizInfo[0].answerNum + ". ";
quizNumber[1].textContent = quizInfo[1].answerNum + ". ";
quizNumber[2].textContent = quizInfo[2].answerNum + ". ";
quizNumber[3].textContent = quizInfo[3].answerNum + ". ";
// quizNumber
quizAsk[0].textContent = quizInfo[0].answerAsk;
quizAsk[1].textContent = quizInfo[1].answerAsk;
quizAsk[2].textContent = quizInfo[2].answerAsk;
quizAsk[3].textContent = quizInfo[3].answerAsk;
// quizAsk
quizResult[0].textContent = quizInfo[0].answerResult;
quizResult[1].textContent = quizInfo[1].answerResult;
quizResult[2].textContent = quizInfo[2].answerResult;
quizResult[3].textContent = quizInfo[3].answerResult;
// quizResult
<for๋ฌธ์ผ๋ก ๋ฌธ์ ์ถ๋ ฅํ๊ธฐ>
๋ฐ๋ณต์ ์ธ ๊ฒ๋ค์ ๋ฐ๋ณต๋ฌธ์ธ for๋ฌธ์ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก text ์ฝ์
์ด ๊ฐ๋ฅํ๋ค.
.length๋ฅผ ์ฌ์ฉํ for๋ฌธ : i๊ฐ 0์ผ ๋ quizInfo ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค. ์ปดํจํฐ๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฐฐ์ด ๊ธธ์ด์ธ 3๊น์ง ๋ฐํํ๋ค.
for(let i=0; i<quizInfo.length; i++ ){
quizType[i].textContent = quizInfo[i].answerType;
quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
quizAsk[i].textContent = quizInfo[i].answerAsk;
quizResult[i].textContent = quizInfo[i].answerResult;
}
quizType[i].textContent = quizInfo[i].answerType;
quizType ์์์ ์ ์ธํ ํ๊ทธ์ quizInfo ์์์ ๋ฐฐ์ด ์ answerType ํค์ "์น๋์์ธ๊ธฐ๋ฅ์ฌ 2016๋ 01์24์ผ" ๊ฐ์ ๋์ ํ์ฌ ์ถ๋ ฅ
์ฝ๊ฒ ๋งํ๋ฉด = ๊ธฐ์ค ์ค๋ฅธ์ชฝ์ ์ผ์ชฝ์ ๋์ ํ๋ ๊ฒ.
=> quizInfo[i] ๊ฐ์ธ answerType์ quizType[i] ๊ฐ์ textContent๋ฅผ ์ด์ฉํ์ฌ ํ ์คํธ๋ฅผ ๋์ ํ๋ค.
<forEach๋ฌธ์ผ๋ก ๋ฌธ์ ์ถ๋ ฅํ๊ธฐ>
// forEach()๋ก ์ถ๋ ฅํ๊ธฐ = arr.forEach(function(){});
// quizInfo๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ค๋ก ์ถ๋ ฅ = quizType์ ์ธ๋ฑ์ค์ quizInfo์ ์ธ๋ฑ์ค ์ .answerType๋ง ์ถ๋ ฅ
quizInfo.forEach(function(el, i){
quizType[i].textContent = quizInfo[i].answerType;
quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
quizAsk[i].textContent = quizInfo[i].answerAsk;
quizResult[i].textContent = quizInfo[i].answerResult;
});
// ํ์ดํํจ์
quizInfo.forEach((el, i) => {
quizType[i].textContent = quizInfo[i].answerType;
quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
quizAsk[i].textContent = quizInfo[i].answerAsk;
quizResult[i].textContent = quizInfo[i].answerResult;
});
#4. ์ ๋ต ์จ๊ธฐ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ์ด 4๊ฐ์ง ๋ฌธ์ ์ ์ ๋ต์ ์จ๊ฒจ๋ณด์!
// ์ ๋ต์จ๊ธฐ๊ธฐ
// ์ผ๋ฐ ์ถ๋ ฅ์ผ๋ก ์ ๋ต ์จ๊ธฐ๊ธฐ
quizResult[0].style.display = "none";
quizResult[1].style.display = "none";
quizResult[2].style.display = "none";
quizResult[3].style.display = "none";
// for๋ฌธ์ผ๋ก ์ ๋ต ์จ๊ธฐ๊ธฐ
for(let i=0; i<quizInfo.length; i++){
quizResult[i].style.display = "none";
}
// forEach๋ฌธ์ผ๋ก ์ ๋ต ์จ๊ธฐ๊ธฐ
// forEach๋ e > i > a ์์๋ก ์์ ์ฝ๋๋ค.
// ์ฆ ๋ฐ์ดํฐ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฝ๊ณ ์ถ๋ค๋ฉด e ์ i๋ฅผ ๋ชจ๋ ์ ์ธํด์ฃผ์ด์ผ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ง์ฝ i๋ง ์ ์ธํด๋ i๋ฅผ e๋ก ์๊ฐํ์ฌ ์ฝ๋๋ค.
quizInfo.forEach((e, i)=>{
quizResult[i].style.display = "none";
});
quizResult[i].style.display = "none";
๊ฐ ์ธ๋ฑ์ค์ Result๊ฐ์ css์คํ์ผ ์ค display = "none";์ ์ฃผ์ด์ ์ ๋ต ๊ฒฐ๊ณผ ๋ฐ์ค๋ฅผ ๋ณด์ด์ง ์๊ฒ ํด์ค๋ค.
#5. ์ ๋ต ํ์ธํ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค
forEach๋ฌธ๊ณผ addEventListener๋ฅผ ํตํด ์ ๋ต์ ํ์ธํด๋ณด์! ๊ทธ๋ฆฌ๊ณ classList๋ฅผ ํตํด ๋ต์ ๋ฐ๋ฅธ ํ์ ๋ณํ๋ฅผ ์ ์ธํด๋ณด์!
// ์ ๋ตํ์ธํ๊ธฐ
// quizConfirm.addEventListener("click",() => {});
// quizConfirm.addEventListener("click",function(){});
// quizConfirm๋ฅผ ํด๋ฆญํ ์ ์ด๋ฒคํธ๊ฐ ์คํ๋๋๋กํ๋ค.
quizConfirm.forEach((btn, num)=>{
btn.addEventListener("click", ()=>{
// ์ฌ์ฉ์ ์ ๋ต
const userWord = quizInput[num].value; //์ฌ์ฉ์์ ์ ๋ต์ ์๋ฌธ์๋ก ๋ณํ์ํค๊ณ ์ฌ๋ฐฑ์ ์์ ์ค๋ค.
// ์ฌ์ฉ์ ์ ๋ต = ๋ฌธ์ ์ ๋ต
if(userWord == quizInfo[num].answerResult){
// num = ํน๋ณํ ๊ธฐ๋ฅ์ผ๋ก ๋ฃ์ ๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค๋ฅผ ํํํ๊ธฐ ์ํ ๋ช
์นญ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค. ( 0๋ฒ ๊ฐ์ฒด์ ํด์ฆ 1๋ฒ ๊ฐ์ฒด์ ํด์ฆ ๋ฑ )
// ์ ๋ต
quizView[num].classList.add("like");
quizConfirm[num].style.display = "none";
} else {
// ์ค๋ต
quizView[num].classList.add("dislike");
quizConfirm[num].style.display = "none";
quizResult[num].style.display = "block";
quizInput[num].style.display = "none"
// ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ ๋ต๊ณผ ์ค๋ต์ ๊ฐ๊ฐ ์คํ์ผ ์ ์ธ์ ๋ฐ๋ก ํด์ฃผ์ด์ผ ํ๋ค.
}
});
});
forEach์ ๋ฆฌ
1. quizConfirm์ ์๊ฐ 1๊ฐ๊ฐ ์๋ 4๊ฐ๋ก ๋ณต์์ด๊ธฐ ๋๋ฌธ์ forEach๋ฅผ ํตํด ๋ฌธ์ ๊ฐ ์ด 4๊ฐ๋ผ๋ ์ ๋ณด๋ฅผ ์ ์ธ ํด์ฃผ์ด์ผ ์ ์์ผ๋ก ์ด๋ฒคํธ ์คํ์ด ๊ฐ๋ฅํ๋ค.
2. quizConfirm.addEventListener("click",(btn, num) => {});์์ btn == element / >num == index์ด๋ฉฐ ์ด๋ฆ์ ๋ถ์ฌ์ค ๊ฒ ๋ฟ, ํน๋ณํ ๊ธฐ๋ฅ์ด ๊ฐ๋ฏธ๋ ๊ฒ์ ์๋๋ค.
3. quizConfirm == botten์ด๋ฉฐ ์์์[num]์ ๋ถ์ฌ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ค ๋ณ๋ก ๋ถ๋ฌ์ค๊ฒ๋ ํ๋ค.
!๊ธฐ์ตํด์ผ ํ ๋ฌธ๋ฒ!
๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ๋ฒ : ๋ฐฐ์ด ์ ๊ฐ์ฒด ํ์
๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ํจ์จ์ น์ธ ๋ฐฉ๋ฒ์ด๋ค.
const quizInfo = [
{ํค1 : ๊ฐ1},{ํค2 : ๊ฐ2},{ํค3 : ๊ฐ3},{ํค4 : ๊ฐ4}
];
//๊ฐ์ฒด๋ ํญ์ ํค์ ๊ฐ(key-value pair)์ผ๋ก ๊ฐ์ ๋ฃ์ด์ผ ํ๋ฉฐ ๊ทธ ๊ฐ๋ค์ ์์ฑ(Property)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
//๊ฐ์ฒด ํ์์ ๊ตฌ๋ถ์ ์ผํ(comma)๋ก ํด์ค๋ค.
for๋ฌธ์ ํตํ ์ถ๋ ฅ ๋ฐฉ๋ฒ
์ถ๋ ฅํ ๋ ์ฃผ์ํ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒฝ์ฐ ์ ์ฅ ๋ฐฉ๋ฒ์ด ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ฌ์ค๋ ค๋ ๋ฐ์ดํฐ๊ฐ์ ํค๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
์ฆ .answerType๊ณผ ๊ฐ์ ํค๋ฅผ ์ ํํ์ง ์์ ์ฑ๋ก ์ถ๋ ฅํ๊ฒ ๋๋ฉด ๋ฌด์์ ์ถ๋ ฅํ๋ผ๋ ๊ฑด์ง ์ธ์ํ์ง ๋ชปํ์ฌ object๋ก ๊ฐ์ด ์ถ๋ ฅ๋๋ ์ค๋ฅ๊ฐ ๋๋ค.
for(let i=0; i<4; i++ ){
quizType[i].textContent = quizInfo[i].answerType;
}
forEach์ ํตํ ์ถ๋ ฅ ๋ฐฉ๋ฒ
๊ฐ์ฒด์ ์ธ๋ฑ์ค ๋ณ๋ก ๋ค์ด์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฝ๊ธฐ ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ e์ i๋ฅผ ์ ์ธํด์ฃผ์ด์ผ ํ๋ฉฐ, ์์์๋ ๋๊ฐ์ด ์ธ๋ฑ์ค๋ฅผ ๋ถ์ฌ์ฃผ์ด์ผ ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์๋๋ค.
quizInfo.forEach(function(e, i){
quizType[i].textContent = quizInfo[i].answerType;
});
quizConfirm๋ฅผ ํด๋ฆญํ ์ ์ด๋ฒคํธ๊ฐ ์คํ๋๋๋กํ๋ค.
quizConfirm.addEventListener("click",function(){});
4๊ฐ์ quizConfirm๊ฐ ์์์ ์๋ ค์ฃผ๊ณ ๋ฒํผ๋ค์ ์ด๋ฒคํธ๊ฐ ์คํ๋ ์ ์๋๋ก ํ๋ค.
quizConfirm.forEach((btn, num)=>{
btn.addEventListener("click", ()=>{});
});
ํด๋์ค๋ฅผ ํ๋ ์ถ๊ฐ์ํจ๋ค.
.classList.add("ํด๋์ค๋ช
");
๊ฒฐ๊ณผ๋ณด๊ธฐ
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ02 (4) | 2022.08.17 |
---|---|
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ01 (5) | 2022.08.17 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ04 (6) | 2022.08.08 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ02 (3) | 2022.08.05 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ01 (1) | 2022.08.04 |
๋๊ธ