Fast Blinking Hello Kitty

SITE 만들기

퀴즈사이트 만들기 2

코른이되고싶은코린이 2023. 3. 9. 16:53

728x90

퀴즈사이트 만들기

저번 게시물에서 기본 퀴즈사이트 레이아웃을 만들었다면 이번엔 정답 입력 후 입력 값에 따라 강아지 모션이 변하는 사이트를 만드는 방법입니다.

※정답을 입력해 보세요

코드블럭

<!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>퀴즈이펙트02</title>

    <link rel="stylesheet" href="CSS/quiz.css">
    <link rel="stylesheet" href="CSS/reset.css">
    

</head>
<body>
    <header id="header">
        <h1><a href="../javascript14.html"></a> Quiz <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:lee3ll@naver.com">lee3ll@naver.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.innerText = infoNumber;
        quizQuestion.innerText = 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){
                // alert("정답입니다.")
                dogWrap.classList.add("like");              //정답 버튼 제거, 강아지 스마일
            } else {
                // alert("오답입니다.")
                dogWrap.classList.add("dislike");
            }
        });
    </script>

</body>
</html>

main코드는 이전과 같기때문에 복사해줍니다.

코드보충설명

Input 사용자가 값을 입력할 수 있는 텍스트 상자, 체크박스, 라디오 버튼 등을 생성.
<input> 요소는 다양한 속성(attribute)을 가질 수 있다. (ex) 'id' , 'name', 'value', 'required', 'plaoeholder', 'plaoeholder', 'disable')
value html의 입력요소에서 사용되는 속성 중 하나. 이 속성은 사용자가 입력한 값을 나타내며, 문자열 데이터를 가진다.
trim JavaScript에서 문자열(String)의 양쪽 끝에 있는 공백(스페이스, 탭, 개행 등)을 제거하는 함수.
'trim'함수는 문자열 객체의 메소드로 제공. 따라서 문자열 객체의 변수 또는 리터럴 값 뒤에 'trim()'을 붙여서 사용 가능.
textContent
DOM 요소의 속성 중 하나로, 해당 요소에 포함된 텍스트 콘텐츠를 나타내는 문자열을 반환하는 것으로 모든 자식 요소의 텍스트를 결합하여 반환
textContent는 HTML 태그를 제거하지 않고 모든 텍스트를 반환하기 때문에, XSS(Cross-Site Scripting) 공격 등의 보안 이슈에 주의.