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

[Quiz Effect] ํ€ด์ฆˆ ์ดํŽ™ํŠธ 02 - ์ฃผ๊ด€์‹ ์œ ํ˜•

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 8. 4.
๋ฐ˜์‘ํ˜•

ํ€ด์ฆˆ ๋งŒ๋“ค๊ธฐ 02

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ ๋™์•ˆ ๋ฐฐ์› ๋˜ JavaScript๋ฅผ ์ด์šฉํ•˜์—ฌ ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํ•™์Šต ๋‚ด์šฉ์„ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ ์‹œํ—˜ ๊ณต๋ถ€ ์—ด์‹ฌํžˆ ํ•ด ๋ด…์‹œ๋‹ค!
๋ณ€์ˆ˜(let)์™€ ์ƒ์ˆ˜(const)์— ์ฟผ๋ฆฌ ์…€๋ ‰ํ„ฐ ๊ฐ’์„ ์ €์žฅ์‹œํ‚ค๊ณ , ๊ทธ ๋™์•ˆ ๋ฐฐ์šด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ ์ •๋ณด๋ฅผ HTML ํƒœ๊ทธ์— ์ถœ๋ ฅ์‹œํ‚ค๊ณ , ์ •๋‹ต์„ ์ˆจ๊ฒผ๋‹ค๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋“ค์„ ๊ตฌํ˜„์‹œ์ผœ๋ด…์‹œ๋‹ค!


์ฃผ๊ด€์‹ ์œ ํ˜•

๋‘๋ฒˆ์งธ ์ฃผ๊ด€์‹ ์œ ํ˜•์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์™€ ๋ถ€์—ฐ ์„ค๋ช…(์ฃผ์„ ์ฒ˜๋ฆฌ๋จ)์ด๋‹ค.
HTML๊ณผ CSS ์†Œ์Šค๋ฅผ ํ•จ๊ป˜ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋งจ ์•„๋ž˜์˜ '์›๋ณธ ์†Œ์Šค ๋ณด๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๊ฒƒ.

// ์„ ํƒ์ž : ์ƒ์ˆ˜ const๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ ์„ ์–ธํ•œ ๋‹ค์Œ HTML ์˜์—ญ์˜ div, ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ๋“ฑ์˜ Class๋ช…๊ณผ ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.
//const ์ ์ ˆํ•œ ์ƒ์ˆ˜ ์ด๋ฆ„ = document.querySelector("Class๋ช…");
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 quizInput = document.querySelector(".quiz__answer .input");       // ์‚ฌ์šฉ์ž ์ •๋‹ต
const quizView = document.querySelector(".quiz__view");             // ๊ฐ•์•„์ง€

// ๋ฌธ์ œ ์ •๋ณด
// HTML ๋ถ€๋ถ„์€ ๋น„์›Œ๋‘๊ณ  ์ด๊ณณ์—๋‹ค๊ฐ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ ์ด๊ณณ์—์„œ ์ˆ˜์ •ํ•  ๊ฒƒ.
const answerType = "์›น๋””์ž์ธ๊ธฐ๋Šฅ์‚ฌ";
const answerNum = "2";
const answerAsk = "๊ธฐ์—…์˜ ์ƒˆ๋กœ์šด ์ด๋… ๊ตฌ์ถ•์— ํ•„์š”ํ•œ ์ด๋ฏธ์ง€์™€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์‹œ์Šคํ…œ์„ ์˜๋„์ , ๊ณ„ํš์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ธฐ์—…์ด๋ฏธ์ง€ํ†ตํ•ฉ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€์š”?";
let answerResult = "CIP";       // ์ƒ์ˆ˜ const ์•„๋‹Œ ๋ณ€์ˆ˜ let ์จ์ค˜์•ผ ํ•จ

// ๋ฌธ์ œ ์ถœ๋ ฅ
// ์œ„์˜ '๋ฌธ์ œ ์ •๋ณด'์—์„œ ์ƒ์ˆ˜์— ์ €์žฅํ•ด๋‘์—ˆ๋˜ ๊ฐ’์„ ์ถœ๋ ฅ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ž„
// TMI) innerText ๋Œ€์‹  textContent๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ต์Šคํ”Œ๋กœ์–ด๊นŒ์ง€ ํ˜ธํ™˜ ๊ฐ€๋Šฅ.
quizType.innerText = answerType;
quizNumber.innerText = "0" + answerNum + ". ";      // ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ "0N. " ์‹์œผ๋กœ ์ถœ๋ ฅ์‹œํ‚ด
quizAsk.innerText = answerAsk;
quizResult.innerText = "์ •๋‹ต์€ โ€œ " + answerResult + " โ€ ์ž…๋‹ˆ๋‹ค.";

// ์ •๋‹ต ์ˆจ๊ธฐ๊ธฐ
// '์ •๋‹ต ํ™•์ธ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ธฐ ์ „๊นŒ์ง€๋Š” ์ •๋‹ต์„ ์ˆจ๊ฒจ์•ผ ํ•จ
quizResult.style.display = "none";

// ์ •๋‹ต ํ™•์ธ - ์ •๋‹ต ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ
quizConfirm.addEventListener("click", () => {
    quizInput.style.display = "none";       // ์ •๋‹ต ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ž…๋ ฅ์ฐฝ์„ ์—†์•ค๋‹ค
    quizResult.style.display = "block";     // ์ˆจ๊ฒจ์ ธ์žˆ๋˜ ์ •๋‹ต์„ ๊ณต๊ฐœ์‹œํ‚จ๋‹ค
    quizConfirm.style.display = "none";     // ์ •๋‹ต ํ™•์ธ ๋ฒ„ํŠผ์„ ์—†์•ค๋‹ค
        
    // ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋‹ต
    const userWord = quizInput.value.toLowerCase().trim();       // ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’ , toLowerCase ์ž…๋ ฅํ•˜๋ฉด ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์‚ฌ๋ผ์ง , ์—ฌ๋ฐฑ ์ƒ๊ด€X
    answerResult = answerResult.toLowerCase().trim();
        
    // ์ฝ˜์†”์ฐฝ ํ…Œ์ŠคํŠธ์šฉ (ํ…Œ์ŠคํŠธ ๋งˆ์น˜๋ฉด ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ธฐ!)
    // console.log(userWord);
    // console.log(answerResult);

    // ์‚ฌ์šฉ์ž ์ •๋‹ต == ๋ฌธ์ œ ์ •๋‹ต (์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ), if๋ฌธ ์‚ฌ์šฉ
    if(userWord == answerResult){
        // ์ •๋‹ต์ผ ๊ฒฝ์šฐ
        quizView.classList.add("like");     // ๊ฐ•์•„์ง€ ๋ฏธ์†Œ์ง“๋„๋ก ํ•˜๊ธฐ
    } else {
        // ์˜ค๋‹ต์ผ ๊ฒฝ์šฐ
        quizView.classList.add("dislike");      // ๊ฐ•์•„์ง€ ์Šฌํผํ•˜๋„๋ก ํ•˜๊ธฐ
    }
});
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.