JAVASCRIPT

퀴즈 이펙트 만들기 2

hyejeong3283 2023. 3. 9. 13:10
728x90
반응형

HTML

이전 퀴즈 이펙트에서 기능을 추가하여 업그레이드 해보았습니다.

문제를 바꾸어주고 정답 입력영역과 정답 확인 기능을 넣었습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>퀴즈 이펙트01</title>

    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/quiz.css">
</head>
<body>
    <header id="header">
        <h1><a href="../javascript14.html">Quiz</a> <em>주관식 확인하기 유형</em></h1>
        <ul>
            <li><a href="quizEffect01.html">1</a></li>
            <li class="active"><a href="quizEffect02.html">2</a></li>
        </ul>
    </header>
    <!-- //header -->

    <main id="main">
        <div class="quiz__wrap">
            <div class="quiz">
                <div class="quiz__header">
                    <h2 class="quiz__title"><span></span><em></em></h2>
                </div>
                <div class="quiz__main">
                    <div class="quiz__question">
                        <em></em>. <span></span>
                    </div>
                    <div class="quiz__view">
                        <div class="dog__wrap">
                            <div class="card-container">
                                <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>                        
                    </div>
                    <div class="quiz__answer">
                        <input class="input" type="text" placeholder="정답을 적어주세요!">
                        <button class="confirm">정답 확인하기</button>
                        <div class="result">연변대비</div>
                    </div>
                </div>
                <div class="quiz__footer">
                    <div class="quiz__desc">설명</div>
                </div>
            </div>
        </div>
    </main>
    <!-- //main -->

    <footer id="footer">
        <a href="mailto:hyejeong3283@gmail.com">hyejeong3283@gmail.com</a>
    </footer>
    <!-- //footer -->

    <script>
        // 선택자
        const quizWrap = document.querySelector(".quiz__wrap");
        const quizTitle = quizWrap.querySelector(".quiz__title span");
        const quizTime = quizWrap.querySelector(".quiz__title em");
        const quizQuestion = quizWrap.querySelector(".quiz__question span");
        const quizQuestionNum = quizWrap.querySelector(".quiz__question em"); 
        const quizDesc = quizWrap.querySelector(".quiz__desc");
        const quizAnswerConfirm = quizWrap.querySelector(".quiz__answer .confirm");
        const quizAnswerResult = quizWrap.querySelector(".quiz__answer .result");
        const quizAnswerInput = quizWrap.querySelector(".quiz__answer .input");
        const dogWrap = quizWrap.querySelector(".dog__wrap");
        const quizFooter = quizWrap.querySelector(".quiz__footer");

        // 문제 정보
        const infoType = "정보처리 기능사";
        const infoTime = "2011년 5회";
        const infoNumber = "2";
        const infoQuestion = "프레젠테이션에서 화면 전체를 전환하는 단위를 의미하는 것은?";
        const infoAnswer = "슬라이드"; 
        const infoDesc = "슬라이드는 프레젠테이션의 화면 전체를 말하고 개체는 화면을 구성하는 개개의 요소를 말한다."
        

        // 문제 출력
        quizTitle.textContent = infoType;
        quizTime.textContent = infoTime;
        quizQuestionNum.textContent = infoNumber;
        quizQuestion.textContent = infoQuestion;
        quizDesc.textContent = infoDesc;
        quizAnswerResult.textContent = infoAnswer;

        // 정답 & 해설 숨기기
        quizAnswerResult.style.display = "none";
        quizFooter.style.display = "none";

        // 사용자 정답
        quizAnswerConfirm.addEventListener("click", function(){
            const userAnswer = quizAnswerInput.value.trim();
            quizAnswerInput.style.display = "none";     // 인풋 박스 숨김
            quizAnswerConfirm.style.display = "none";   // 정답 확인 버튼 숨김
            quizAnswerResult.style.display = "block";   // 정답 보이기
            quizFooter.style.display = "block";         // 해설 보이기

            if(infoAnswer == userAnswer){
                dogWrap.classList.add("like");
            } else {
                dogWrap.classList.add("dislike");
            }
        });

    </script>
</body>
</html>

 

<div class="quiz__answer">
    <input class="input" type="text" placeholder="정답을 적어주세요!">
    <button class="confirm">정답 확인하기</button>
    <div class="result">연변대비</div>
</div>

quiz__answer라는 클래스명을 가진 태그 안에 정답을 적을 수 있는 영역을 넣어주었습니다.

 

정답을 적고 정답 확인하기 버튼을 누르게 되면

quizAnswerInput.style.display = "none";       // 정답 적는 영역에 none 값을 주어 숨김

quizAnswerConfirm.style.display = "none";  // 정답확인하기 버튼에 none 값을 주어 숨김

quizAnswerResult.style.display = "block";     // 정답 영역에 block 값을 주어 정답 보이기
quizFooter.style.display = "block";               // 해설 영역에 block 값을 주어 해설 보이기

 

정답을 적어주세요! 칸에 답을 쓰고, 정답 확인하기 버튼을 누릅니다.

그 후 아래 이미지와 같이 정답인지, 오답인지에 따라 강아지 표정과 배경이 바뀝니다.

그리고 정답 적는 칸과 확인하기 버튼이 없어지고 정답과 문제풀이 TIP 영역이 나오게 됩니다.

 

용어정리

속성 설명
querySelector() 문서에서 특정 css 선택자로 요소를 찾는 DOM 메서드입니다.
innerText DOM  요소의 텍스트 내용을 가져오거나 설정하는데 사용되는 속성입니다.
style.속성 "속성값", 자바스크립트에서 css 스타일을 표현하는 방법입니다.
classList 요소의 클래스를 추가하거나 제거하여 스타일을 설정하는데 사용됩니다.
addEventListener 자바스크립트에서 이벤트를  대상이 수신할 때마다 호출할 함수를 설정합니다.
trim() 문자열 좌우에서 공백을 제거하는 함수입니다.
content 텍스트를 추가할 수 있는 매우 간단한 프로퍼티입니다.
value text 박스에 표시되는 글자입니다.

 

정답일 경우                                                                                            오답일 경우

 

완성~!