๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript/Effect

ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ (6) ๊ฐ๊ด€์‹ ์Šฌ๋ผ์ด๋“œ ์œ ํ˜•

by oranssy 2022. 8. 25.
728x90
๋ฐ˜์‘ํ˜•

โญ๏ธ ๊ฐ๊ด€์‹ ๋‹ค์ˆ˜ ๋ฌธํ•ญ (์ •๋‹ต ๊ฐฏ์ˆ˜ / ํ•ฉ๊ฒฉ ์—ฌ๋ถ€ ํ™•์ธ) โญ๏ธ


01. ๋งŒ๋“œ๋Š” ์ˆœ์„œ

1) ์ถœ๋ ฅํ•  ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ์š”์†Œ ์„ ํƒํ•˜๊ธฐ
2) ์งˆ๋ฌธ๊ณผ ์ •๋‹ต ๋‚ด์šฉ, ํ•„์š”ํ•œ ๊ฐ’ ์ž…๋ ฅํ•˜๊ธฐ
3) ์งˆ๋ฌธ ๋‚ด์šฉ ์ถœ๋ ฅํ•˜๊ธฐ
4) ์ •๋‹ต ๋‚ด์šฉ ์ˆจ๊ฒจ๋†“๊ธฐ
5) ์ •๋‹ต ํ™•์ธ ๋ฐ ๊ฒฐ๊ณผ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ
6) ์ •๋‹ต ๋ฒ„ํŠผ์˜ ๋™์ž‘ ์„ค์ •ํ•˜๊ธฐ

02. < script > ์— ์ž‘์„ฑํ•˜๊ธฐ

// ๋ฌธ์ œ ์ •๋ณด
const quizInfo = [
{
answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2014๋…„ 01ํšŒ)",
answerNum: "1",
answerAsk: "๋‹ค์Œ์˜ ๋””์ž์ธ ์›๋ฆฌ ์ค‘ ๋ฆฌ๋“ฌ์— ํ•ด๋‹น๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€?",
answerChoice: [
"์ ์ด",
"๊ฐ•์กฐ",
"๊ท ์ผ",
"์ ์ฆ",
],
answerResult: "๊ท ์ผ",
answerEx: "๊ท ์ผ // '๋ฆฌ๋“ฌ(์œจ๋™)'์€ ๊ฐ ๋ถ€๋ถ„ ์‚ฌ์ด์— ์‹œ๊ฐ์ ์ธ ๊ฐ•ํ•œ ํž˜๊ณผ ์•ฝํ•œ ํž˜์ด ๊ทœ์น™์ ์œผ๋กœ ์—ฐ์†๋  ๋•Œ ์ƒ๊ธฐ๋Š” ๋””์ž์ธ์˜ ์›๋ฆฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. '๊ท ์ผ'์€ ๋ถ€ํ”ผ, ์ฆ๋Ÿ‰ ๋“ฑ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ์™€ ์ƒ‰์ฑ„์—์„œ ์‹œ๊ฐ์ ์ธ ์•ˆ์ •๊ฐ์„ ์ด๋ฃจ๋Š” ๊ฒƒ์ด๋ฉฐ, ๋ฆฌ๋“ฌ์— ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", // ์ •๋‹ต ํ•ด์„ค
},
{
answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2014๋…„ 01ํšŒ)",
answerNum: "2",
answerAsk: "ํ•ด์•ˆ์— ์žˆ๋Š” ์กฐ์•ฝ๋Œ์€ ์ž์—ฐ์˜ ํž˜์— ์˜ํ•ด ํ•„์—ฐ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ˜•ํƒœ๋ผ๋Š” ์ž์—ฐ์˜ ๋ฒ•์น™์ด ๋งŒ๋“  ์ž์—ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ฃผ์žฅํ•œ ์‚ฌ๋žŒ์€?",
answerChoice: [
"๋ฅด ์ฝ”๋ฅด๋ท”์ง€์—",
"ํŒŒํŒŒ๋„ฅ",
"์•„๋ฅธํ•˜์ž„",
"๋ชจํ™€๋กœ๋‚˜๊ธฐ",
],
answerResult: "๋ชจํ™€๋กœ๋‚˜๊ธฐ",
answerEx: "๋ชจํ™€๋กœ๋‚˜๊ธฐ // ๋ชจํ™€๋กœ๋‚˜๊ธฐ์˜ ์‚ฌ์ƒ์—์„œ ์งˆ๋ฌธ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋„์ €ํžˆ ๋ชป์ฐพ๊ฒ ์Šต๋‹ˆ๋‹ค. 'ํ•ด์•ˆ์— ์žˆ๋Š” ๋ฌด์ธ๋„์—์„œ ํ™€๋กœ๋‚˜๊ธฐ'๋ผ๊ณ  '๋ชจํ™€๋กœ๋‚˜๊ธฐ'๋ฅผ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š” :) ",
},
// ...(์ƒ๋žต)...์ด์–ด์„œ ๊ณ„์† ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
// ๋ฌธ์ œ ์ •๋ณด (์„ ํƒ์ž)
const quizType = document.querySelector(".quiz__type"); // ๋ฌธ์ œ ์œ ํ˜•
const quizQuestion = document.querySelector(".quiz__question"); // ๋ฌธ์ œ ๋ฒˆํ˜ธ, ์งˆ๋ฌธ
const querySelects = 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; // ๋งž์ถ˜ ๋ฌธ์ œ ๊ฐฏ์ˆ˜
// ๋ฌธ์ œ ์ถœ๋ ฅ
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; // ๋ฒˆํ˜ธ์™€ ์งˆ๋ฌธ ์ถœ๋ ฅ
querySelects.innerHTML = choiceTag; // ๊ฐ๊ด€์‹ ๋ณด๊ธฐ ์ถœ๋ ฅ
quizResult.innerHTML = quizInfo[index].answerEx; // ํ•ด์„ค ์ถœ๋ ฅ
// ์ •๋‹ต ํ™•์ธ ์„ ํƒ์ž (์œ„์ชฝ์— ์ ์„ ์ˆ˜ ์—†์–ด์„œ ์•„๋ž˜์— ์ ์–ด์คŒ)
const quizChoice = querySelects.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);
const choiceSelected = (answer) => {
// alert(answer.textContent); ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•œ ๋‹ต์„ ์ฐฝ ๋ฉ”์‹œ์ง€๋กœ ๋„์›Œ์คŒ
let userAnswer = answer.textContent; // ์‚ฌ์šฉ์ž๊ฐ€ ์ฒดํฌํ•œ ์ •๋‹ต
let currentAnswer = quizInfo[quizCount].answerResult; // ๋ฌธ์ œ ์ •๋‹ต
if(userAnswer == currentAnswer){
quizScore++;
console.log("์ •๋‹ต")
quizView.classList.add("like")
} 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} ๋ฌธ์ œ๋ฅผ ๋งž์ถ”๊ณ , ${quizInfo.length - quizScore} ๋ฌธ์ œ๋ฅผ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. `
if(quizScore >= 2){
quizConfirm.textContent += "๐ŸŽ€์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ๊ฒฉ๐Ÿ™ƒ";
} else {
quizConfirm.textContent += "๐Ÿค๐Ÿพ์กฐ๊ธˆ๋งŒ ๋” ํž˜๋‚ด์„ธ์š”. ๋ถˆํ•ฉ๊ฒฉ๐Ÿ˜ง";
}
}
quizCount++;
updateQuiz(quizCount);
quizView.classList.remove("like","dislike")
}
quizConfirm.addEventListener("click", answerQuiz);

03. ๊ฒฐ๊ณผ๋ณด๊ธฐ

728x90
๋ฐ˜์‘ํ˜•

'Javascript > Effect' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ (2)  (3) 2022.08.29
์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ (1)  (3) 2022.08.29
search Effect (3)  (6) 2022.08.23
search Effect (2)  (3) 2022.08.18
search Effect (1)  (2) 2022.08.18

๋Œ“๊ธ€