λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Effect/Search Effect

[Search Effect] 검색 μ΄νŽ™νŠΈ 05

by 코딩곡책 2022. 9. 29.
λ°˜μ‘ν˜•

검색 μ΄νŽ™νŠΈ λ§Œλ“€κΈ° 05

이번 μ‹œκ°„μ—λŠ” κ·Έ λ™μ•ˆ λ°°μ› λ˜ JavaScriptλ₯Ό μ΄μš©ν•˜μ—¬ 검색 μ΄νŽ™νŠΈλ₯Ό λ§Œλ“€μ–΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
이번 ν•™μŠ΅ λ‚΄μš©μ„ 잘 ν™œμš©ν•˜μ—¬ κ·Έλ™μ•ˆ λ°°μ› λ˜ CSS 속성듀을 검색창 ν˜•μ‹μœΌλ‘œ μ›ν•˜λŠ” κ²°κ³Όκ°€ λ‚˜μ˜€λ„λ‘ λ§Œλ“€μ–΄λ³΄λ„λ‘ ν•©μ‹œλ‹€. λ‚˜μ€‘μ— λͺ¨λ₯΄λŠ” 게 생겼을 λ•Œ κ³΅λΆ€ν•˜κΈ° νŽΈν•˜κ²Œ 말이죠!

자, 그럼 μ‹œμž‘ν•΄λ³ΌκΉŒμš”?


HTML μ†ŒμŠ€ 보기

검색 μ΄νŽ™νŠΈ 05의 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><a href="searchEffect03.html">03</a></li>
                <li><a href="searchEffect04.html">04</a></li>
                <li class="active"><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>filter()λ₯Ό μ΄μš©ν•˜μ—¬ μ†μ„±μ˜ μ€‘μš”λ„ 보여주기</span>
            <h1>CSS 속성 κ²€μƒ‰ν•˜κΈ°</h1>

            <div class="search__click">
                <ul>
                    <li data-star="0"><a href="#">β˜†β˜†β˜†β˜†β˜†</a></li>
                    <li data-star="1"><a href="#">β˜…β˜†β˜†β˜†β˜†</a></li>
                    <li data-star="2"><a href="#">β˜…β˜…β˜†β˜†β˜†</a></li>
                    <li data-star="3"><a href="#">β˜…β˜…β˜…β˜†β˜†</a></li>
                    <li data-star="4"><a href="#">β˜…β˜…β˜…β˜…β˜†</a></li>
                    <li data-star="5"><a href="#">β˜…β˜…β˜…β˜…β˜…</a></li>
                </ul>
                <ul>
                    <li data-number="1"><a href="#">1개 이상</a></li>
                    <li data-number="2"><a href="#">2개 이상</a></li>
                    <li data-number="3"><a href="#">3개 이상</a></li>
                    <li data-number="4"><a href="#">4개 이상</a></li>
                </ul>
            </div>

            <div class="search__info">
                <div>전체 속성 개수 : <span class="num">0</span></div>
            </div>

            <div class="search__list">
                <ul class="line">

                </ul>
            </div>
        </div>
    </main>
    <!-- // main -->

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

JavaScript μ†ŒμŠ€ 보기

검색 μ΄νŽ™νŠΈ 05의 JavaScript μ†ŒμŠ€μ™€ λΆ€μ—° μ„€λͺ…(주석 처리됨)이닀. μƒμˆ˜ cssProperty에 검색결과에 λ„μšΈ CSS 속성 λ¦¬μŠ€νŠΈλ“€μ„ λͺ¨λ‘ μ €μž₯ν•˜κ³  이것듀을 좜λ ₯ν•˜κ³  속성 클릭 μ‹œ μ„€λͺ…이 λ‚˜μ˜€λ„λ‘ ν•˜λŠ” μž‘μ—…κ³Ό λ§ˆμ§€λ§‰μœΌλ‘œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ κ°’κ³Ό μΌμΉ˜ν•˜λŠ” 속성 name의 descλ₯Ό 좜λ ₯μ‹œμΌœμ£ΌλŠ” 슀크립트λ₯Ό μ§ λ‹€. 숫자λ₯Ό λ³„λ‘œ μΉ˜ν™˜ν•˜λŠ” μž‘μ—…μ€ μ•„λž˜ 주석 처리된 λΆ€μ—° μ„€λͺ…을 μ°Έμ‘°ν•  것.

// CSS 속성 리슀트 μ €μž₯
const cssProperty = [
    { name: "accent-color", desc: "νŠΉμ • μš”μ†Œμ— 색상을 지정할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€." },
    { name: "align-content", desc: "μ½˜ν…μΈ  μ•„μ΄ν…œμ˜ μƒν•˜κ΄€κ³„ μ •λ ¬ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "align-items", desc: "μ½˜ν…μΈ  μ•„μ΄ν…œμ˜ λ‚΄λΆ€ μƒν•˜κ΄€κ³„ μ •λ ¬ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
]

const searchList = document.querySelector(".search__list ul");
const searchClick = document.querySelectorAll(".search__click ul li");
const star = document.querySelectorAll(".search__click ul li a")
const searchNum = document.querySelector(".search__info .num");        // 전체 개수

let count=0;

// 좜λ ₯ν•˜κΈ°
function updateList(list){
    listCSS = "";

    for(const data of list){
        starList = star[data.star].innerText;   // 숫자λ₯Ό λ³„λ‘œ μΉ˜ν™˜ν•¨
        count++;

        listCSS += `<li><strong>${data.name}</strong> : ${data.desc} <em>${starList}</em></li>`;
        // 속성 이름 : μ„€λͺ… <em>숫자λ₯Ό λ³„λ‘œ μΉ˜ν™˜ν•œ κ°’</em>
    }
    searchNum.innerHTML = count;
    count = 0;

    searchList.innerHTML = listCSS;
}
updateList(cssProperty);

// ν΄λ¦­ν•˜κΈ°
searchClick.forEach(star => {
    star.addEventListener("click", () => {
        const target = star.dataset.star;
        const target2 = star.dataset.number;

        const filterList = cssProperty.filter(data => data.star == target || data.star >= target2);
        
        searchNum.innerHTML = filterList.length;        // 속성 개수 ν‘œμ‹œ

        updateList(filterList);
    });
});
λ°˜μ‘ν˜•

λŒ“κΈ€


Reference Book

JavaScript
HTML
CSS
κ΄‘κ³  μ€€λΉ„μ€‘μž…λ‹ˆλ‹€.