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

[Search Effect] ๊ฒ€์ƒ‰ ์ดํŽ™ํŠธ 02

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

๊ฒ€์ƒ‰ ์ดํŽ™ํŠธ ๋งŒ๋“ค๊ธฐ 02

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ ๋™์•ˆ ๋ฐฐ์› ๋˜ JavaScript๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์ดํŽ™ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํ•™์Šต ๋‚ด์šฉ์„ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ๊ทธ๋™์•ˆ ๋ฐฐ์› ๋˜ CSS ์†์„ฑ๋“ค์„ ๊ฒ€์ƒ‰์ฐฝ ํ˜•์‹์œผ๋กœ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. ๋‚˜์ค‘์— ๋ชจ๋ฅด๋Š” ๊ฒŒ ์ƒ๊ฒผ์„ ๋•Œ ๊ณต๋ถ€ํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ๋ง์ด์ฃ !

์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?


HTML ์†Œ์Šค ๋ณด๊ธฐ

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

<body>
    <header id="header">
        <h1>Search</h1>
        <nav>
            <ul>
                <li><a href="searchEffect01.html">01</a></li>
                <li class="active"><a href="searchEffect02.html">02</a></li>
                <li><a href="searchEffect03.html">03</a></li>
                <li><a href="searchEffect04.html">04</a></li>
                <li><a href="searchEffect05.html">05</a></li>
                <li><a href="searchEffect06.html">06</a></li>
            </ul>
        </nav>
    </header>
    <!-- // header -->

    <main id="main">
        <div class="search__wrap">
            <span>indexOf()๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๊ธฐ</span>
            <h1>CSS ์†์„ฑ ๊ฒ€์ƒ‰ํ•˜๊ธฐ</h1>
            <div class="search__box">     <!-- ๊ฒ€์ƒ‰์ƒ์ž -->
                <label for="search">๊ฒ€์ƒ‰ํ•˜๊ธฐ</label>    <!-- ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ธฐ์— ์ฝํžˆ์ง€๋งŒ ๊ฒ‰์œผ๋กœ๋Š” ์•ˆ๋ณด์ด๊ฒŒ CSS ์†์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌ -->
                <input type="text" id="search" placeholder="CSS ์†์„ฑ ๋ฐ ์œ ํ˜•์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.">
            </div>
            <div class="search__info">    <!-- ์ „์ฒด ์†์„ฑ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ์šฉ -->
                <div class="type">ํ”Œ๋ ‰์Šค, ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋ฐฑ๊ทธ๋ผ์šด๋“œ, ๊ธฐํƒ€ ๋“ฑ๋“ฑ ์œ ํ˜•๋ณ„๋กœ ๊ฒ€์ƒ‰ํ•ด๋ณด์„ธ์š”.</div>
                <div>์ „์ฒด ์†์„ฑ ๊ฐœ์ˆ˜ : <span class="num">0</span></div>
            </div>
            <div class="search__list">
                <div class="css">
                    <ul>
                        <li data-name="accent-color"><strong>accent-color</strong> : ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ์˜ ์ด๋™์„ ์„ค์ •ํ•จ</li>
                        <li data-name="align-content" data-type="ํ”Œ๋ ‰์Šค"><strong>align-content</strong> : ์ฝ˜ํ…์ธ  ์•„์ดํ…œ์˜ ์ƒํ•˜๊ด€๊ณ„ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ์„ค์ •</li>
                        <li data-name="align-items" data-type="ํ”Œ๋ ‰์Šค"><strong>align-items</strong> : ์ฝ˜ํ…์ธ  ์•„์ดํ…œ์˜ ๋‚ด๋ถ€ ์ƒํ•˜๊ด€๊ณ„ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•จ</li>
                        <!-- โ€ฆ ๊ธธ์–ด์ง€๋ฏ€๋กœ ์ดํ•˜ ์ƒ๋žต -->
                    </ul>
                </div>            
            </div>
        </div>
    </main>
    <!-- // main -->

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

JavaScript ์†Œ์Šค ๋ณด๊ธฐ

๊ฒ€์ƒ‰ ์ดํŽ™ํŠธ 02์˜ JavaScript ์†Œ์Šค์™€ ๋ถ€์—ฐ ์„ค๋ช…(์ฃผ์„ ์ฒ˜๋ฆฌ๋จ)์ด๋‹ค.

// ์„ ํƒ์ž : ์ƒ์ˆ˜ const๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ ์„ ์–ธ ํ›„ HTML ์˜์—ญ์˜ div, ์‹œ๋งจํ‹ฑํƒœ๊ทธ ๋“ฑ์˜ class๋ช…๊ณผ ์—ฐ๊ฒฐ
const searchBox = document.querySelector(".search__box input");   // ๊ฒ€์ƒ‰ ์˜์—ญ
const searchList = document.querySelectorAll(".search__list ul li");    // ๋ชฉ๋ก ๋ฆฌ์ŠคํŠธ
const searchInfo = document.querySelector(".search__info .num");        // ์ „์ฒด ๊ฐœ์ˆ˜

// ์ „์ฒด ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
searchInfo.textContent = searchList.length; // CSS ์†์„ฑ ์ด ๊ฐœ์ˆ˜ ์ถœ๋ ฅ

// ์ „์ฒด ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ : for๋ฌธ (๋ณต์žก, ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
// for(let i = 0; i <= searchList.length; i++) {
//     const searchInfo = document.querySelector(".search__info .num");
    
//     searchInfo.innerText = i;
// }

// ๊ฒ€์ƒ‰์˜์—ญ
searchBox.addEventListener("keyup", () => {
    const searchWord = searchBox.value;     // ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ‚ค์›Œ๋“œ

    searchList.forEach(el => {
        const cssName = el.dataset.name;    // CSS ์†์„ฑ ๋ชจ๋“  ๊ฐ’

        if(cssName.includes(searchWord)) {
            el.classList.remove("hide");   // ์ผ์น˜๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ณด์—ฌ์คŒ(์ˆจ๊น€ ํšจ๊ณผ๋ฅผ ์ œ๊ฑฐ)
        } else {
            el.classList.add("hide");    // ์—†์œผ๋ฉด ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๊ธฐ(์ˆจ๊น€ ํšจ๊ณผ ํ™œ์„ฑํ™”)
        }
    });
});
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

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