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

ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ (3) ์ฃผ๊ด€์‹ ๋‹ค์ˆ˜ ๋ฌธํ•ญ

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

โญ๏ธ Javascript โ˜› Quiz Effect โญ๏ธ


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

ํ€ด์ฆˆ์˜ ๊ตฌ์„ฑ

ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋กœ๋Š” ํ€ด์ฆˆ ์ข…๋ฅ˜, ํ€ด์ฆˆ ๋ฒˆํ˜ธ, ์งˆ๋ฌธ ๋‚ด์šฉ, ์ •๋‹ต ๊ฒฐ๊ณผ์™€ ํ™•์ธ ๋ฒ„ํŠผ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
<div>์— ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ , ์›ํ•˜๋Š” ๊ณณ์— ์ •๋ณด์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.


[3] ์ฃผ๊ด€์‹ ์œ ํ˜• โ˜› ๋‹ค์ˆ˜์˜ ํ€ด์ฆˆ (์ •๋‹ต ์˜ค๋‹ต ํ™•์ธํ•˜๊ธฐ)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์งˆ๋ฌธ ๋‚ด์šฉ๊ณผ ๋‹ต๋ณ€ ์ž…๋ ฅ์ฐฝ ๋ฐ ๋‹ต์ด ์žˆ์œผ๋ฉฐ, ํด๋ฆญํ•˜๋ฉด ์ •๋‹ต ํ™•์ธ ๋ฐ ๊ฐ•์•„์ง€์˜ ํ‘œ์ •์ด ๋ณ€ํ™”ํ•˜๋Š” ํ€ด์ฆˆ ๋ฌธํ•ญ์„ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค.

// 01. ์„ ํƒ์ž : ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• (์ถœ๋ ฅ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฏ€๋กœ querySelector ๋์— 'All'์„ ๋ถ™์—ฌ์คŒ.)

    const quizType = document.querySelectorAll(".quiz__type");                // ํ€ด์ฆˆ ์ข…๋ฅ˜
    const quizNumber = document.querySelectorAll(".quiz__question .number");  // ํ€ด์ฆˆ ๋ฒˆํ˜ธ
    const quizAsk = document.querySelectorAll(".quiz__question .ask");        // ์งˆ๋ฌธ ๋‚ด์šฉ
    const quizConfirm = document.querySelectorAll(".quiz__answer .confirm");  // ์ •๋‹ต ํ™•์ธ ๋ฒ„ํŠผ
    const quizResult = document.querySelectorAll(".quiz__answer .result");    // ์ •๋‹ต ๋‚ด์šฉ
    const quizInput = document.querySelectorAll(".quiz__answer .input");      // ์‚ฌ์šฉ์ž ๋‹ต๋ณ€
    const quizView = document.querySelectorAll(".quiz__view");                // ๊ฐ•์•„์ง€ ๋ชจ์Šต


    // 02. ์ถœ๋ ฅํ•  ์ •๋ณด์— ๋Œ€ํ•œ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. (๋‹ค์ˆ˜์˜ ๊ฐ’, ๊ฐ์ฒด๋กœ ํ‘œํ˜„)

    const quizInfo = [
        {
            answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2015๋…„ 10์›”)",
            answerNum: "1",
            answerAsk: "์Œ์—์„œ๋„ ์ƒ‰์„ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ์„ ๋ฌด์—‡์ด๋ผ๊ณ  ํ• ๊นŒ์š”?",
            answerResult: "์ƒ‰์ฒญ"
        },
        {
            answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2015๋…„ 10์›”)",
            answerNum: "2",
            answerAsk: "์ „์ž์šฐํŽธ(e-mail)์„ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ๋ฌด์—‡์ด๋ผ๊ณ  ํ• ๊นŒ์š”?",
            answerResult: "SMTP"
        },
        {
            answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2015๋…„ 10์›”)",
            answerNum: "3",
            answerAsk: "๋ง๋ง‰์— ๋‹ค๋ฅธ ์ƒ‰๊ด‘์ด ์ž๊ทนํ•˜์—ฌ ํ˜ผํ•ฉ๋˜๋Š” ํ˜„์ƒ์œผ๋กœ, ์ƒ‰ ์ ์ด ์„œ๋กœ ๊ฐ€๊น๊ฒŒ ์žˆ์–ด ๋ช…๋„์™€ ์ฑ„๋„๊ฐ€ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ํ˜ผํ•ฉ ๋ฐฉ์‹์„ ๋ฌด์—‡์ด๋ผ๊ณ  ํ• ๊นŒ์š”?",
            answerResult: "๋ณ‘์น˜ํ˜ผํ•ฉ"
        },
        {
            answerType: "์›น ๋””์ž์ธ ๊ธฐ๋Šฅ์‚ฌ (2015๋…„ 10์›”)",
            answerNum: "4",
            answerAsk: "์ตœ์ดˆ์˜ GUI ํ™˜๊ฒฝ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?",
            answerResult: "๋ชจ์ž์ดํฌ"
        },
    ]


    // 03. ํ€ด์ฆˆ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ธฐ

    // (1) ํ•˜๋‚˜์”ฉ ์ ์–ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ  -> ํ€ด์ฆˆ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค. (ex. 100๊ฐœ์˜ ํ€ด์ฆˆ, ๋˜๋Š” ๊ทธ ์ด์ƒ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด)
    // quizType[0].textContent = quizInfo[0].answerType;      // ํ€ด์ฆˆ ์ข…๋ฅ˜
    // quizType[1].textContent = quizInfo[1].answerType;
    // quizType[2].textContent = quizInfo[2].answerType;
    // quizType[3].textContent = quizInfo[3].answerType;

    // quizNumber[0].textContent = quizInfo[0].answerNum + ". ";      // ํ€ด์ฆˆ ๋ฒˆํ˜ธ
    // quizNumber[1].textContent = quizInfo[1].answerNum + ". ";
    // quizNumber[2].textContent = quizInfo[2].answerNum + ". ";
    // quizNumber[3].textContent = quizInfo[3].answerNum + ". ";

    // quizAsk[0].textContent = quizInfo[0].answerAsk;      // ์งˆ๋ฌธ ๋‚ด์šฉ
    // quizAsk[1].textContent = quizInfo[1].answerAsk;
    // quizAsk[2].textContent = quizInfo[2].answerAsk;
    // quizAsk[3].textContent = quizInfo[3].answerAsk;

    // quizResult[0].textContent = quizInfo[0].answerResult;      // ์ •๋‹ต ๋‚ด์šฉ
    // quizResult[1].textContent = quizInfo[1].answerResult;
    // quizResult[2].textContent = quizInfo[2].answerResult;
    // quizResult[3].textContent = quizInfo[3].answerResult;

    // (2) ์ผ์ผ์ด ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ, ์œ„์˜ ๋‚ด์šฉ์„ for๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณธ๋‹ค.
    //  for( i=0; i<4; i++ ){                      // ์ˆซ์ž 4 ๋กœ ์ ์–ด๋„ ๋˜์ง€๋งŒ, ์ˆซ์ž๊ฐ€ ๋” ์ปค์กŒ์„ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ 'quizInfo.length'๋กœ ์ ์–ด์ฃผ์ž.
    //      quizType[i].textContent = quizInfo[i].answerType;
    //      quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
    //      quizAsk[i].textContent = quizInfo[i].answerAsk;
    //      quizResult[i].textContent = quizInfo[i].answerResult;
    //  }

    // (3) for๋ฌธ์€ forEach๋ฌธ์œผ๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋•Œ ๊ทธ๋•Œ ์ƒํ™ฉ์— ๋งž๋Š” ๊ฒƒ์œผ๋กœ ๊ณจ๋ผ์„œ ์‚ฌ์šฉํ•˜์ž.
    quizInfo.forEach( (e, i) => {                      // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ฐ”๊ฟˆ. e ๋Š” element, i ๋Š” index ๋ฅผ ์˜๋ฏธ.
        quizType[i].textContent = quizInfo[i].answerType;
        quizNumber[i].textContent = quizInfo[i].answerNum + ". ";
        quizAsk[i].textContent = quizInfo[i].answerAsk;
        quizResult[i].textContent = quizInfo[i].answerResult;
    })


    // 04. '์ •๋‹ต ํ™•์ธ ๋ฒ„ํŠผ' ๋ฐ‘์œผ๋กœ ๋ณด์ด๋Š” "์ •๋‹ต ๋‚ด์šฉ" ์ˆจ๊ฒจ๋†“๊ธฐ

    // (1) ์ผ์ผ์ด ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๊ธฐ -> ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆซ์ž๊ฐ€ ์ปค์ง€๋ฉด ํž˜๋“ค๋‹ค.
    // quizResult[0].style.display = "none";
    // quizResult[1].style.display = "none";
    // quizResult[2].style.display = "none";
    // quizResult[3].style.display = "none";
    
    // (2) for๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ
    // for( i=0; i<quizInfo.length; i++ ){
    //     quizResult[i].style.display = "none";
    // }

    // (3) for๋ฌธ์„ forEach๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ
    quizInfo.forEach((e, i) => {
        quizResult[i].style.display = "none";
    });

    
    // 05. ์ •๋‹ต ํ™•์ธ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ (๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ •๋‹ต,์˜ค๋‹ต์— ๋”ฐ๋ผ ๊ฐ•์•„์ง€ ํ‘œ์ •์ด ๋ณ€ํ•˜๋„๋ก ์ถœ๋ ฅํ•˜๊ธฐ)
    // quizConfirm.addEventListener("click", () => {         // ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ๋Š” ์‹คํ–‰๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์—ฌ์„œ ์‹คํ–‰์ด ๋˜์ง€ ์•Š์Œ.
    // });                             // ๋‹จ์ผ ํ€ด์ฆˆ์ผ ๋•Œ์—๋Š” ์„ฑ๋ฆฝ๋˜์ง€๋งŒ ์ง€๊ธˆ์€ ํ€ด์ฆˆ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ด๊ธฐ์— ์‹์ด ์„ฑ๋ฆฝ๋˜์ง€ ์•Š์Œ. ์•„๋ž˜์— ๋‹ค์‹œ ์ ์–ด์ฃผ๊ฒ ์Œ.

    // quizConfirm.forEach((btn) => {                      // quizConfirm ์—๊ฒŒ forEach ํ•จ์ˆ˜๋ฅผ ์ฃผ์–ด '์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์–ด'๋ผ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•จ.
    //     btn.addEventListener("click", () => {           // btn ์€ quizConfirm ์— ๋Œ€์ž… ๋˜๋Š” ๊ฒƒ.
    //         
    //         // ์‚ฌ์šฉ์ž ๋‹ต๋ณ€
    //         const userWord = quizInput.values.toLowerCase().trim();   // ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ณ  ๋นˆ์นธ์— ์ƒ๊ด€ ์—†์ด ์ •๋‹ต์„ ํ™•์ธํ•˜๋„๋ก
    //     })
    // });

    quizConfirm.forEach((btn, num) => {
        btn.addEventListener("click", () => {
            
            const userWord = quizInput[num].value.toLowerCase().trim();      // ์‚ฌ์šฉ์ž ๋‹ต๋ณ€

            // console.log(userWord)                           // ์ถœ๋ ฅ๊ฐ’์ด ๋ฐ”๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ console.log ๋กœ ํ™•์ธํ•˜๊ธฐ
            // console.log(quizInfo[num].answerResult)
            
            if(userWord == quizInfo[num].answerResult){            // ์‚ฌ์šฉ์ž ๋‹ต๋ณ€ == ๋ฌธ์ œ ์ •๋‹ต ์ด๋ฉด~

                // alert("์ •๋‹ต")                // ์ •๋‹ต์ผ ๋•Œ ์ถœ๋ ฅ๊ฐ’์ด ๋ฐ”๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธ
                quizView[num].classList.add("like");               // ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋™์‹œ์— ์ถœ๋ ฅ๋˜์ง€ ์•Š๋„๋ก [num] ์„ ์ ์–ด์ค€๋‹ค. -> ์š”์†Œ๋ฅผ ์ฐพ์•„๊ฐ€๋„๋ก ์„ค์ •
                quizConfirm[num].style.display = "none";           // ์ •๋‹ต์ด๋ฉด ๊ฐ•์•„์ง€๊ฐ€ ์›ƒ๋Š” ํ‘œ์ •์ด ๋‚˜์˜ค๊ณ ,
            } else {

                // alert("์˜ค๋‹ต")                // ์˜ค๋‹ต์ผ ๋•Œ ์ถœ๋ ฅ๊ฐ’์ด ๋ฐ”๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธ
                quizView[num].classList.add("dislike");            // ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋Š” ํ‘œ์ •์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
                quizConfirm[num].style.display = "none";
                quizResult[num].style.display = "block";
                quizInput[num].style.display = "none";   // ํ‹€๋ ธ์„ ๋•Œ ์ •๋‹ต๋งŒ ๋ณด์ด๋„๋ก display ์„ค์ •.
            }
        })
    });


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

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€