728x90
반응형
퀴즈 프로그램
웹디자인기능사 자격증을 준비하면서 퀴즈가 나오는 프로그램를 구현하였습니다.
자바스크립트-객관식
"정답 확인하기" 버튼을 누르면 답이 나오도록 구성하였습니다.
js
//선택자
const quizType = document.querySelector( ".quiz__type" ); //퀴즈종류
const quizNumber = document.querySelector( ".quiz__question .number"); //퀴즈번호
const quizAsk = document.querySelector( ".quiz__question .ask"); //퀴즈 질문
const quizConfirm = document.querySelector( ".quiz__answer .confirm") //정답확인버튼
const quizResult = document.querySelector( ".quiz__answer .result") // 정답 결과
const quizDog = document.querySelector( " .quiz__view .dog") //강아지
//문제 정보
const answerType = "웹디자인기능사";
const answerNum = "1";
const answerAsk = "인접하는 두 색의 경계 부분에 색상, 명도, 채도의 대비가 더욱 강하게 일어나는 현상을 무엇이라고 하는가?"
const answerResult = "연변대비"
//정답 숨기기
quizResult.style.display = "none";
//문제 출력
quizType.innerText = answerType;
// quizType.innerHtml 태그인식함
quizNumber.innerText = answerNum + ". ";
quizAsk.innerText = answerAsk;
quizResult.textContent = answerResult; //textContent와 innerText는 같지만 익스플로러 때문에 생긴 문제이다.
//정답 확인
//정답 버튼을 클릭하면 확인버튼 안보이게.. 숨겨진 정답은 보이게..
//정답을 확인하면 강아지가 웃고 있어야한다. 클래스 like 추가
quizConfirm.addEventListener("click", function(){
quizConfirm.style.display = "none"; //버튼을 누르면 정답버튼을 없애기
quizResult.style.display = "block";
quizDog.classList.add("like"); //class를 추가해준다.
})
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="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">
<button class="confirm">정답 확인하기</button> //버튼
<div class="result"></div>
</div>
</div>
</div>
CSS
강아지 모션과 그림부분은 너무 길어서 생략하도록 하겠습니다.
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: border-box;
}
a {
text-decoration: none;
}
body {
background-color: #f6f6f6;
background-image:
linear-gradient(90deg, #cdcccc 0px, #cdcccc 1px, transparent 1px, transparent 99px, transparent 100px),
linear-gradient(#cdcccc 0px, #cdcccc 1px, transparent 1px, transparent 99px, transparent 100px),
linear-gradient(#e0e0e0 0px, #e0e0e0 1px, transparent 1px, transparent 99px, transparent 100px),
linear-gradient(90deg, #e0e0e0 0px, #e0e0e0 1px, transparent 1px, transparent 99px, transparent 100px),
linear-gradient(transparent 0px, transparent 5px, #f6f6f6 5px, #f6f6f6 95px, transparent 95px, transparent 100px),
linear-gradient(90deg, #e0e0e0 0px, #e0e0e0 1px, transparent 1px, transparent 99px, #e0e0e0 99px, #e0e0e0 100px),
linear-gradient(90deg, transparent 0px, transparent 5px, #f6f6f6 5px, #f6f6f6 95px, transparent 95px, transparent 100px),
linear-gradient(transparent 0px, transparent 1px, #f6f6f6 1px, #f6f6f6 99px, transparent 99px, transparent 100px),
linear-gradient(#cdcccc, #cdcccc);
background-size: 100px 100%, 100% 100px, 100% 10px, 10px 100%, 100% 100px, 100px 100%, 100px 100%, 100px 100px, 100px 100px;
}
/*이미지 연동*/
#header {
background: #262626;
color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
position: relative;
z-index: 10;
}
#header::before {
content: "";
border: 4px ridge #a3a3a3;
position: absolute;
left: 5px;
top: 5px;
width: calc(100% - 10px);
height: calc(100% - 10px);
box-sizing: border-box;
z-index: -1;
}
#header h1 {
padding: 3px 3px 6px 10px;
font-family: "DungGeunMo";
font-size: 30px;
}
#header h1 a {
color: #fff;
}
#header h1 em {
font-size: 16px;
font-style: normal;
}
@media (max-width: 600px) { /*모바일에서도 빈부분이 안보이게 해준다.*/
#header h1 em {
display: none;
}
}
#header nav {
padding-right: 10px;
}
#header nav li {
display: inline;
}
#header nav li a {
color: #fff;
padding: 0 10px;
border: 1px dashed #fff;
font-family: "DungGeunMo";
}
#header nav li.active a {
color: #000;
background: #fff;
}
#footer {
background: #fff;
text-align: center;
padding: 20px;
width: 100%;
box-sizing: border-box;
margin-top: 150px;
position: fixed;
left: 0;
bottom: 0;
z-index: 10000;
}
#footer a {
color: #000;
font-family: "DungGeunMo";
}
#footer a:hover {
text-decoration: underline;
}
/* quiz__wrap */
.quiz__wrap {
display: flex;
align-items: center;
justify-content: center;
margin-top: 50px;
margin-bottom: 150px;
}
.quiz {
max-width: 500px;
width: 100%;
background-color: #fff;
border: 8px ridge #cacaca;
margin: 10px;
}
.quiz__type {
background-color: #cacaca;
text-align: center;
display: block;
font-size: 16px;
border: 3px ridge #cacaca;
color: #3b3b3b;
font-family: "DungGeunMo";
padding: 4px;
}
.quiz__question {
border-top: 6px ridge #cacaca;
border-bottom: 6px ridge #cacaca;
padding: 20px;
font-family: "DalseoHealing";
line-height: 1.3;
}
.quiz__question .number {
color: rgb(245, 32, 32)
}
.quiz__question .ask {
display: inline;
}
.quiz__answer {
border-top: 6px ridge #cacaca;
padding: 10px;
background-color: #f5f5f5;
}
.quiz__answer .confirm {
border: 6px ridge #cacaca;
width: 100%;
font-size: 22px;
padding: 13px 20px;
background-color: #d6d6d6;
font-family: "DalseoHealing";
cursor: pointer;
}
.quiz__answer .result {
width: 100%;
font-size: 22px;
padding: 13px 20px;
border: 6px ridge #cacaca;
box-sizing: border-box;
text-align: center;
font-family: "DalseoHealing";
}
.quiz__answer .input {
width: 100%;
border: 6px ridge #cacaca;
font-size: 22px;
padding: 13px 20px;
background-color: #fff;
font-family: "DalseoHealing";
margin-bottom: 10px;
}
.quiz__view {
background-color: #f5f5f5;
font-family: "DalseoHealing";
position: relative;
overflow: hidden;
}
.quiz__view .true {
width: 120px;
height: 120px;
line-height: 120px;
background-color: rgb(9, 32, 206);
color: #fff;
border-radius: 50%;
text-align: center;
position: absolute;
left: 70%;
top: 100px;
opacity: 0;
}
.quiz__view .false {
width: 120px;
height: 120px;
line-height: 120px;
background-color: rgb(191, 16, 16);
border-radius: 50%;
text-align: center;
position: absolute;
right: 70%;
top: 100px;
opacity: 0;
/*투명도*/
}
.quiz__view.like .true {
opacity: 1;
animation: wobble 0.6s;
}
.quiz__view.dislike .false {
opacity: 1;
animation: wobble 0.6s;
}
@keyframes wobble { /*애니메이션 효과를 준다.*/
0% {transform: translateX(0) rotate(0deg);}
15% {transform: translateX(-25%) rotate(-5deg);}
30% {transform: translateX(20%) rotate(3deg)}
45% {transform: translateX(-15%) rotate(-3deg);}
60% {transform: translateX(10%) rotate(2deg)}
75% {transform: translateX(-5%) rotate(-1deg)}
100% {transform: translateX(0) rotate(0deg)}
}
결과
반응형
'Effect' 카테고리의 다른 글
자바스크립트 활용6 - search 이펙트 (3) | 2022.08.18 |
---|---|
자바스크립트 활용5 - search 이펙트 (5) | 2022.08.17 |
자바스크립트 활용편4 - 객관식문제 만들어보기 (8) | 2022.08.08 |
자바스크립트 활용편3 - 퀴즈이펙트 만들어보기 (10) | 2022.08.06 |
자바스크립트 활용편2 - 퀴즈이펙트 만들어보기 (12) | 2022.08.04 |