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

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

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

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

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

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


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

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

<body>
    <header id="header">
        <h1>Search</h1>
        <nav>
            <ul>
                <li><a href="searchEffect01.html">01</a></li>
                <li><a href="searchEffect02.html">02</a></li>
                <li class="active"><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>charAt()๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๊ธฐ</span>
            <h1>CSS ์†์„ฑ ์ฒซ ๊ธ€์ž ๊ฒ€์ƒ‰ํ•˜๊ธฐ</h1>
            <div class="search__info">
                <div class="keyword">
                    <span>a</span>
                    <span>b</span>
                    <span>c</span>
                    <span>d</span>
                    <span>e</span>
                    <span>f</span>
                    <span>g</span>
                    <span>h</span>
                    <span>i</span>
                    <span>j</span>
                    <span>k</span>
                    <span>l</span>
                    <span>m</span>
                    <span>n</span>
                    <span>o</span>
                    <span>p</span>
                    <span>q</span>
                    <span>r</span>
                    <span>s</span>
                    <span>t</span>
                    <span>u</span>
                    <span>v</span>
                    <span>w</span>
                    <span>x</span>
                    <span>y</span>
                    <span>z</span>
                </div>
                <div>์ „์ฒด ์†์„ฑ ๊ฐœ์ˆ˜ : <span class="num">0</span></div>
            </div>
            <div class="search__list">
                <div class="css">
                    <ul>
                        <li><strong>accent-color</strong> : ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ์˜ ์ด๋™์„ ์„ค์ •ํ•จ</li>
                        <li><strong>align-content</strong> : ์ฝ˜ํ…์ธ  ์•„์ดํ…œ์˜ ์ƒํ•˜๊ด€๊ณ„ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ์„ค์ •</li>
                        <li><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 ์†Œ์Šค ๋ณด๊ธฐ

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

// ์„ ํƒ์ž
const searchKeyword = document.querySelectorAll(".search__info .keyword span");   // ์•ŒํŒŒ๋ฒณ
const searchList = document.querySelectorAll(".search__list ul li");    // ๋ชฉ๋ก ๋ฆฌ์ŠคํŠธ
const searchInfo = document.querySelector(".search__info .num");        // ์ „์ฒด ๊ฐœ์ˆ˜
let count = 0;

// ์ „์ฒด ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
searchInfo.textContent = searchList.length; // CSS ์†์„ฑ ์ด ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
    
searchKeyword.forEach(el => {
    el.addEventListener("click", () => {
        const searchWord = el.innerText;    // ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•œ ์•ŒํŒŒ๋ฒณ
        searchWord.textContent = searchInfo.length  // ์„ ํƒํ•œ ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜
        // console.log(searchWord);

        searchList.forEach(el => {
            const cssName = el.querySelector("strong").innerText;   // CSS ์†์„ฑ ํ…์ŠคํŠธ
            // console.log(cssName);

            // ์•ŒํŒŒ๋ฒณ ์ฒซ๊ธ€์ž == CSS ์†์„ฑ์˜ ์ฒซ๊ธ€์ž
            if(searchWord.charAt(0) === cssName.charAt(0)) {
                el.classList.remove("hide");
                count++;    // ๊ฐœ์ˆ˜ ๋”ํ•ด์คŒ
            } else {
                el.classList.add("hide");
            }
            searchInfo.textContent = count; // ๊ฒ€์ƒ‰ํ•œ CSS์˜ ์†์„ฑ ๊ฐœ์ˆ˜์— count ์ €์žฅํ•ด์„œ ์ถœ๋ ฅํ•จ
        });
        count = 0;  // ๊ฐœ์ˆ˜ ์ดˆ๊ธฐํ™”
    });
});
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

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