728x90
반응형
객관식(여러문제) 확인하기 : 슬라이드 형식
스크립트를 통해서 객관식 여러문제를 한문제씩 출력하여, 정답과 해설을 확인합시다.
html
기본틀은 그대로 두면서 변동되는 부분만 주석처리 해둡니다.
코드 확인
<div class="quiz__wrap">
<div class="quiz">
<span class="quiz__type"></span>
<h2 class="quiz__question">
<!-- <span class="number"></span>
<div class="ask"></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">
<input type="radio" id="select1" class="select" name="select" value="1">
<span class="choice"></span>
</label>
<label for="select2">
<input type="radio" id="select2" class="select" name="select" value="2">
<span class="choice"></span>
</label>
<label for="select3">
<input type="radio" id="select3" class="select" name="select" value="3">
<span class="choice"></span>
</label>
<label for="select4">
<input type="radio" id="select4" class="select" name="select" value="4">
<span class="choice"></span>
</label> -->
</div>
<div class="result"></div>
<button class="confirm">다음 문제 보기</button>
</div>
</div>
</div>
문제 정보
여러개의 문제를 배열 속에 객체에 저장하여 활용합니다. 객관식 보기의 내용은 배열[]을 이용합니다
코드 확인
//문제 정보
const quizInfo = [
{
answerType: "웹디자인기능사 2011년 1회",
answerNum: "1",
answerAsk: "건강 이미지의 웹사이트를 구성하려고 한다. 가장 적합한 컬러는?",
answerChoice: [
"빨강색",
"노랑색",
"검정색",
"녹색",
],
answerResult: "녹색",
answerEx: "초록은 싱그러움과 맑음 등을 상징하기에 적합합니다."
},
{
answerType: "웹디자인기능사 2011년 1회",
answerNum: "2",
answerAsk: "입체파(Cubism)의 대표적인 화가는?",
answerChoice: [
"피카소",
"쿠르베",
"찰스 자보",
"도미에",
],
answerResult: "피카소",
answerEx: "입체파(Cubism)의 대표적인 화가는 피카소입니다."
},
{
answerType: "웹디자인기능사 2011년 1회",
answerNum: "3",
answerAsk: "디자인 원리 중 율동의 요소에 해당하지 않는 것은?",
answerChoice: [
"반복",
"비례",
"강조",
"변칙",
],
answerResult: "비례",
answerEx: "디자인의 원리 - 율동(rhythm) 요소로는 반복, 방사, 점진, 점이, 교차가 있습니다."
},
{
answerType: "웹디자인기능사 2011년 1회",
answerNum: "4",
answerAsk: "디자인의 조건 중 합목적성에 대한 예시로 가장 올바른 것은?",
answerChoice: [
"화려한 집이 살기에 편리하다.",
"주로 장식이 많은 의자가 앉기에 편리하다.",
"의자를디자인할때는앉을사람의몸의치수,체중을고려해야 한다.",
"아름다운 구두가 신기에 편하다.",
],
answerResult: "의자를디자인할때는앉을사람의몸의치수,체중을고려해야 한다.",
answerEx: "합목적성이란 디자인이 대상과 용도, 목적 등에 맞게 이루어져 있는지를 의미합니다."
},
{
answerType: "웹디자인기능사 2011년 1회",
answerNum: "5",
answerAsk: "관용색명의 특징으로 볼 수 없는 것은?",
answerChoice: [
"시대나 유행에 따라서 다소 변하기도 하므로 정확한 색의전달이어렵다.",
"무수히많은색이름과그어원을가지고있어서한꺼번에 습득하기가 어렵다.",
"어느 특정한 색을 여러 가지 언어로 표현하고 있기 때문에 복잡하고 혼동하기 쉽다.",
"몇 가지의 기본적인 색 이름에 수식어, 색상의 형용사를덧붙여서 부른다.",
],
answerResult: "몇 가지의 기본적인 색 이름에 수식어, 색상의 형용사를덧붙여서 부른다.",
answerEx: "색이름에 수식어나 형용사가 붙으면 일반색명(계통색명)이 됩니다."
}
];
선택자 작성
html 요소들에 대한 선택자를 작성합니다. 카운트를 확인하는 변수도 작성합니다.
코드 확인
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 => js
html 소스를 js를 이용해서 넣어서 반복작업을 줄입니다. 변동되는 문제와 보기를 출력합니다.
코드 확인
//문제 출력
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; //해설 updateQuiz() 인텍스를 널고 인포에 인덱스 넣으면 이후 내용들 반복. 카운트 수에 따라 변동
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);
정답 확인
마지막 문제에서 정답의 개수를 확인합니다.
코드 확인
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 = () => {
// quizCount++;
// updateQuiz(quizCount);
// quizView.classList.remove("like", "dislike");
//마지막 문제
if (quizInfo.length - 1 == quizCount) { //마지막 문제 경우. 문제 번호 카운트는 0부터 시작하기에 문제 정보 길이에서 1을 뺀 값과 비교합니다.
// quizConfirm.textContent = "총 몇문제 중에 몇문제를 맞추었습니다." //(몇에 들어가는 곳에 ntt코드 변수)
quizConfirm.textContent = `총 ${quizCount + 1}문제 중에 ${quizScore}문제를 맞추었습니다.`
}
quizCount++; //다음 문제가 출력될 수 있도록 문제가 저장된 배열의 번호를 더하여 줍니다.
updateQuiz(quizCount); //updateQuiz 함수에 quizCount의 값을 넣어 실행합니다.
quizView.classList.remove("like", "dislike"); //다음 문제로 넘어갔을 때, 정답 혹은 오답의 효과가 사라지도록 클래스를 삭제해 줍니다.
}
quizConfirm.addEventListener("click", answerQuiz);
728x90
반응형
'Effect' 카테고리의 다른 글
sliderEffect02 (8) | 2022.08.29 |
---|---|
QuizEffect05 (3) | 2022.08.24 |
searchEffect03 (6) | 2022.08.22 |
QuizEffect - 60문제 (3) | 2022.08.21 |
searchEffect02 (2) | 2022.08.17 |